Weil 1.1 nicht exakt binär dargestellt werden kann; die Approximation ist etwas kleiner als 1.1 - daher ist das Divisionsergebnis etwas zu klein.
Versuchen Sie Folgendes:
Unter Python 2, Typ an der Konsole:
>>> 1.1
1.1000000000000001
In Python 3.1, die Konsole 1.1
angezeigt wird, aber intern, es ist immer noch die gleiche Zahl.
Aber:
>>> 11/1.1
10.0
Wie gnibbler weist darauf hin, das ist das Ergebnis der „inneren Abrundung“ im Rahmen der verfügbaren Genauigkeitsgrenzen von Schwimmern. Und wie MYYN in seinem Kommentar darauf hinweist, verwendet //
einen anderen Algorithmus, um das Ergebnis der Stockwerkteilung als math.floor()
zu berechnen, um a == (a//b)*b + a%b
so gut wie möglich zu erhalten.
Verwenden Sie den Typ Decimal
, wenn Sie diese Genauigkeit benötigen.
http://mail.python.org/pipermail/python-dev/2007-January/070707.html – miku
Die kanonische Frage für Python 2 vs 3 Division Unterschied ist [Wie kann ich zwingen, Division zu sein, Gleitpunkt in Python? Division rollt weiter auf 0] (https://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python-division-keeps-rounding) – smci