Die Dezimalstellen auf 2 stellen für Geld in Python 3
Wie bekomme ich meine Nachkommastellen zu bleiben, an 2 Orten, die für die Darstellung von Geld durch die decimal
Modul?
Habe ich die Einstellung der Präzision und verdammt in der Nähe alles, und scheiterte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim arbeiten mit Geld, das Sie wollen in der Regel zu begrenzen Präzision so spät wie möglich so Sachen wie Multiplikation nicht aggregieren Rundungsfehler. In python 2 und 3 können Sie
.quantize()
eineDecimal
auf die Präzision, die Sie wollen:Die akzeptierte Antwort ist meist korrekt, außer für die Konstante verwenden Sie für die Runden Betrieb. Sollten Sie verwenden
ROUND_HALF_UP
stattROUND_05UP
für Währung Operationen. Nach der docs:Mit
ROUND_05UP
würde nur round up (für positive zahlen), wenn die Anzahl der Hundertstel Stelle eine 5 oder 0, und das ist auch nicht die richtige Währung für math.Hier sind einige Beispiele:
Unwahrheiten Programmierer glauben über Geld:
Einen Weg, um dieses Problem zu lösen ist, um Geld zu speichern Werte in Cent als ganze zahlen, und nur konvertieren, um dezimale Darstellung beim drucken Werte. Dies wird als fixed-point Arithmetik.
Müssen Sie nur legen Sie die Genauigkeit auf 2 (erste Zeile) und Sie wird alles nicht mehr als 2 Dezimalstellen
Nur zum Vergleich:
Decimal
es sei denn, Sie verstehen die möglichen Folgen und die Werkzeuge besitzen, um Sie zu Messen (viel schreiben von unit-tests unit-tests sind immer gut!). Das hantieren mit globalen Einstellungen einer Bibliothek auf ein Ende der Anwendung können leicht brechen scheinbar nicht verwandten Sache in einem anderen Teil des Projekts. Wenn Sie Glück haben, können Sie auch ändern, das Verhalten von Modulen von Drittanbietern, die Sie verwenden, und dass geradeDecimal
intern.decimal.Decimal('9.99') + decimal.Decimal(0) == 10
mit Rahmenprec
auf 2 gesetzt.