Gleitkommazahlen können die meisten Dezimalzahlen nicht genau darstellen. Wenn Sie also ein Gleitkomma-Literal eingeben, erhalten Sie tatsächlich eine Annäherung an dieses Literal. Die Annäherung kann größer oder kleiner als die von Ihnen eingegebene Zahl sein.
Sie können den genauen Wert einer Gleitkommazahl anzeigen, indem Sie sie in Dezimal oder Bruch umwandeln.
>>> from decimal import Decimal
>>> Decimal(0.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
>>> from fractions import Fractio
>>> Fraction(0.01)
Fraction(5764607523034235, 576460752303423488)
Wir können den Bruch-Typ verwenden, um den Fehler zu finden, der durch unser ungenaues Literal verursacht wird.
>>> float((Fraction(1)/Fraction(0.01)) - 100)
-2.0816681711721685e-15
Wir können auch herausfinden, wie detailliert Gleitkommazahlen mit doppelter Genauigkeit um 100 sind, indem wir nextafter von numpy verwenden.
>>> from numpy import nextafter
>>> nextafter(100,0)-100
-1.4210854715202004e-14
Daraus können wir schließen, dass die nächste Gleitkommazahl 1/0.01000000000000000020816681711721685132943093776702880859375tatsächlich genau 100 ist.
Der Unterschied zwischen 1//0.01und int(1/0.01)ist die Rundung. 1 // 0,01 rundet das genaue Ergebnis in einem einzigen Schritt auf die nächste ganze Zahl ab. Wir erhalten also ein Ergebnis von 99.
int (1 / 0.01) hingegen rundet in zwei Schritten, zuerst rundet es das Ergebnis auf die nächste Gleitkommazahl mit doppelter Genauigkeit (genau 100), dann rundet es diese Gleitkommazahl auf die nächste Ganzzahl (dh) wieder genau 100).