it-swarm.com.de

Rundung auf zwei Dezimalstellen in Python 2.7?

Verwenden von Python 2.7 Wie kann ich meine Zahlen auf zwei Dezimalstellen aufrunden anstatt auf die Zahl 10?

print "financial return of outcome 1 =","$"+str(out1)
78
RCN

Verwenden Sie die integrierte Funktion round() :

>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68

Oder eingebaute Funktion format() :

>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'

Oder neue Formatierungszeichenfolge:

>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'

Oder String-Formatierung im alten Stil:

>>> "%.2f" % (1.679)
'1.68'

hilfe zu round:

>>> print round.__doc__
round(number[, ndigits]) -> floating point number

Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number.  Precision may be negative.
187

Da es sich um finanzielle Zahlen handelt, möchten Sie KEINE Gleitkomma-Arithmetik verwenden . Du bist besser dran mit Decimal.

>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')

Formatierung der Textausgabe mit format() im neuen Stil (Standardeinstellung: Halbgerade Rundung):

>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52

Sehen Sie die Unterschiede in der Rundung aufgrund von Gleitkommaungenauigkeit:

>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2)  # This converts back to float (wrong)
33.51
>>> Decimal(33.505)  # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')

Richtiger Weg, um finanzielle Werte zu runden:

>>> Decimal("33.505").quantize(Decimal("0.01"))  # Half-even rounding by default
Decimal('33.50')

Es ist auch üblich, bei verschiedenen Transaktionen andere Rundungsarten zu verwenden:

>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')

Denken Sie daran, dass Sie, wenn Sie das Ergebnis der Rendite simulieren, möglicherweise bei jedem Zinszeitraum runden müssen, da Sie weder Cent-Bruchteile bezahlen/erhalten noch Zinsen über Cent-Bruchteile erhalten können. Bei Simulationen ist es aufgrund von inhärenten Unsicherheiten üblich, nur Gleitkommazahlen zu verwenden. Denken Sie jedoch immer daran, dass der Fehler vorhanden ist. Daher können auch festverzinsliche Anlagen in Bezug auf die Rendite leicht abweichen.

43
Ronan Paixão

Sie können auch str.format() verwenden:

>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23
5
TerryA

Bei der Arbeit mit Pennies/Ganzzahlen. Sie werden mit 115 (wie in $ 1,15) und anderen Zahlen in ein Problem geraten.

Ich hatte eine Funktion, die eine Ganzzahl in einen Float konvertieren würde.

...
return float(115 * 0.01)

Das hat meistens funktioniert, aber manchmal würde es etwas wie 1.1500000000000001 geben.

Also habe ich meine Funktion geändert, um so zurückzukehren ...

...
return float(format(115 * 0.01, '.2f'))

und das wird 1.15 zurückgeben. Nicht '1.15' oder 1.1500000000000001 (gibt ein Gleitkomma zurück, keine Zeichenfolge)

Ich poste das meistens, damit ich mich daran erinnern kann, was ich in diesem Szenario gemacht habe, da dies das erste Ergebnis bei Google ist. 

4
teewuane

Wenn wir die round () - Funktion verwenden, werden keine korrekten Werte angegeben.

sie können es mit, Runde (2.735) und Runde (2.725) überprüfen.

benutzen Sie bitte 

import math
num = input('Enter a number')
print(math.ceil(num*100)/100)
2
Midhun M M

Das Beste, denke ich, ist die Funktion format () :

>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60

Aber ich muss sagen: Verwenden Sie weder rund noch Format, wenn Sie mit finanziellen Werten arbeiten.

2
Thiago Santos
print "financial return of outcome 1 = $%.2f" % (out1)
1
John Doe

Auf die nächsten 0.05 gerundet würde ich folgendermaßen vorgehen:

def roundup(x):
    return round(int(math.ceil(x / 0.05)) * 0.05,2)
0
Lucas VL

Eine ziemlich einfache Problemumgehung besteht darin, den Float zuerst in einen String umzuwandeln. Wählen Sie den Teilstring der ersten vier Zahlen aus, und konvertieren Sie den Teilstring schließlich wieder in Float . Beispiel:

>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1

Kann nicht super effizient sein, aber einfach und funktioniert :)

0
Shan Niz