Ich möchte, dass "a" auf 13,95 gerundet wird.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
Die Funktion Runden
funktioniert nicht so, wie ich es erwartet habe.
Sie stoßen bei Fließkommazahlen auf das alte Problem, dass nicht alle Zahlen exakt dargestellt werden können. Die Befehlszeile zeigt Ihnen nur die vollständige Fließkommaform aus dem Speicher.
Bei der Fließkommadarstellung ist Ihre gerundete Version dieselbe Zahl. Da Computer binär sind, werden Fließkommazahlen als ganze Zahl gespeichert und dann durch eine Zweierpotenz geteilt, so dass 13,95 in ähnlicher Weise dargestellt wird wie 125650429603636838/(2**53).
Zahlen mit doppelter Genauigkeit haben eine Genauigkeit von 53 Bit (16 Ziffern) und normale Fließkommazahlen haben eine Genauigkeit von 24 Bit (8 Ziffern). Der Gleitkommatyp in Python verwendet doppelte Genauigkeit, um die Werte zu speichern.
Ein Beispiel,
>>> 125650429603636838/(2**53)
13.949999999999999
>>> 234042163/(2**24)
13.949999988079071
>>> a=13.946
>>> print(a)
13.946
>>> print("%.2f" % a)
13.95
>>> round(a,2)
13.949999999999999
>>> print("%.2f" % round(a,2))
13.95
>>> print("{0:.2f}".format(a))
13.95
>>> print("{0:.2f}".format(round(a,2)))
13.95
>>> print("{0:.15f}".format(round(a,2)))
13.949999999999999
Wenn Sie nur zwei Dezimalstellen benötigen (z. B. um einen Währungswert anzuzeigen), haben Sie einige bessere Möglichkeiten:
Sie können das Ausgabeformat ändern:
>>> a = 13.95
>>> a
13.949999999999999
>>> print "%.2f" % a
13.95
Es tut genau das, was Sie ihm aufgetragen haben, und es funktioniert korrekt. Lesen Sie mehr über Gleitkomma-Verwirrung und versuchen Sie stattdessen vielleicht Dezimal-Objekte.