Wie runde ich mit Python 2.7 meine Zahlen auf zwei Dezimalstellen anstatt auf die 10 oder so?
print "financial return of outcome 1 =","$"+str(out1)
Wie runde ich mit Python 2.7 meine Zahlen auf zwei Dezimalstellen anstatt auf die 10 oder so?
print "financial return of outcome 1 =","$"+str(out1)
Decimal
Je nachdem, was Sie tatsächlich versuchen, möchten Sie möglicherweise Ganzzahlen oder s verwenden.Antworten:
Verwenden Sie die integrierte Funktion
round()
:Oder eingebaute Funktion
format()
:Oder neue Formatierung von Zeichenfolgen:
Oder alte Formatierung von Zeichenfolgen:
Hilfe zu
round
:quelle
Decimal("{:.2f}".format(val))
Decimal(format(val, '.2f'))
.Decimal('123.345').quantize(Decimal('1.00'), rounding=decimal.ROUND_HALF_UP)
gibt IhnenDecimal('123.35')
. Auf der anderen SeiteDecimal(format(Decimal('123.345'), '.2f'))
gibt Ihnen,Decimal('123.34')
weil die binäre Darstellung von 123.345 kleiner als 123.345 ist.Da Sie sprechen Finanz- Zahlen, Sie wollen nicht Gleitkommaarithmetik verwenden. Sie sind besser dran, wenn Sie Decimal verwenden.
Formatierung der Textausgabe im neuen Stil
format()
(standardmäßig halbrunde Rundung):Sehen Sie die Unterschiede in der Rundung aufgrund von Gleitkomma-Ungenauigkeiten:
Richtiger Weg, um finanzielle Werte zu runden :
Es ist auch üblich, andere Rundungsarten bei verschiedenen Transaktionen zu verwenden:
Denken Sie daran, dass Sie, wenn Sie das Renditeergebnis simulieren, möglicherweise in jeder Zinsperiode runden müssen, da Sie keine Cent-Brüche zahlen / erhalten oder Zinsen über Cent-Brüche erhalten können. Für Simulationen ist es aufgrund von inhärenten Unsicherheiten üblich, nur Gleitkommazahlen zu verwenden. Denken Sie dabei jedoch immer daran, dass der Fehler vorliegt. Daher können sich selbst festverzinsliche Anlagen aus diesem Grund geringfügig in der Rendite unterscheiden.
quelle
Sie können auch verwenden
str.format()
:quelle
Bei der Arbeit mit Pennies / Integer. Sie werden auf ein Problem mit 115 (wie in 1,15 $) und anderen Zahlen stoßen.
Ich hatte eine Funktion, die eine Ganzzahl in ein Float konvertieren würde.
Das hat die meiste Zeit funktioniert, aber manchmal hat es so etwas zurückgegeben
1.1500000000000001
.Also habe ich meine Funktion geändert, um so zurückzukehren ...
und das wird zurückkehren
1.15
. Nicht'1.15'
oder1.1500000000000001
(gibt einen Float zurück, keinen String)Ich poste dies hauptsächlich, damit ich mich daran erinnern kann, was ich in diesem Szenario getan habe, da dies das erste Ergebnis in Google ist.
quelle
Ich denke, das Beste ist, die format () -Funktion zu verwenden:
Aber ich muss sagen: Verwenden Sie keine Runden oder Formate, wenn Sie mit finanziellen Werten arbeiten.
quelle
format
erfordert keine Zeichenfolge für das f-Format. Wenn nicht, haben Sie einen ValueError. Der richtige Code ist:format(out1, '.2f')
ohne Casting auf StringWenn wir die Funktion round () verwenden, werden keine korrekten Werte angegeben.
Sie können es mit rund (2.735) und rund (2.725) überprüfen.
benutzen Sie bitte
quelle
quelle
Eine ziemlich einfache Problemumgehung besteht darin, den Float zuerst in einen String umzuwandeln, den Teilstring der ersten vier Zahlen auszuwählen und schließlich den Teilstring wieder in float umzuwandeln. Beispielsweise:
Kann nicht super effizient sein, aber einfach und funktioniert :)
quelle
Auf die nächsten 0,05 aufrunden, würde ich folgendermaßen vorgehen:
quelle