2013-03-06 10 views
8

Ich schreibe eine Klasse, um Geld zu vertreten, und ein Problem, das ich lief, ist, dass "1.50" != str(1.50). str (1,50) ist gleich 1,5 und plötzlich POOF. 45 Cent sind verschwunden und der Betrag beträgt jetzt 1 Dollar und 5 Cent. kein Dollar und 50 Cent. Kann ich das verhindern oder mache ich etwas falsch? Dies ist Python 2 BTW.Keep Trailing Nullen in Python

+1

Dies stellt einen wichtigen Punkt: einen Dollar und fünfzig Cent ist ** nicht ** entspricht etwa 1,5 Pfund Gewicht. 1,5 Pfund und 1,50 Pfund sind genau das Gleiche, und Sie interessieren sich selten für den Unterschied zwischen 1,5 Pfund und 1,50001 Pfund. Dies liegt daran, dass "Pfund" eine * kontinuierliche * Menge (Gewicht) misst, während "Cent" eine * diskrete * Menge misst. –

+0

Bad Class Design schlägt wieder ... –

Antwort

19

Sie können die format Methode auf Strings verwenden, um festzulegen, wie viele Dezimalstellen Sie darstellen möchten:

>>> "{:.2f}".format(1.5) 
'1.50' 

Aber noch besser wäre die decimal module für die Darstellung von Geld zu verwenden, da Darstellung Probleme mit binären Fließkommawerten können zu etwas schlechteren Ergebnissen führen, wenn Sie arithmetisch arbeiten. Die Dokumentation für das Modul erwähnt einige dieser Fragen speziell - eine der interessantesten für Geld Anwendungen ist:

>>> 0.1+0.1+0.1-0.3 
5.551115123125783e-17 
>>> from decimal import Decimal 
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') - Decimal('.3') 
Decimal('0.0') 
+0

Oder nur '"% .2f "% 1.5' – grc

1
x = 1.500000 

print '%.2f' % x 
print '{:.3f}'.format(x) 

Ergebnis

1.50 
1.500 
Verwandte Themen