Поскольку 1.1 не может быть представлен в двоичной форме; приближение меньше, чем 1,1, поэтому результат деления слишком мал.
Попробуйте следующее:
Под Python 2 типа в консоли:
>>> 1.1
1.1000000000000001
В Python 3.1, консоль будет отображать 1.1
, но внутренне, это все тот же номер.
Но:
>>> 11/1.1
10.0
Как gnibbler указывает, что это результат «внутреннего закругления» в рамках имеющихся точных пределов поплавков. И, как указывает MYYN в своем комментарии, //
использует другой алгоритм для вычисления результата разделения пола, чем math.floor()
, чтобы сохранить a == (a//b)*b + a%b
, а также возможно.
Используйте тип Decimal
, если вам нужна эта точность.
http://mail.python.org/pipermail/python-dev/2007-January/070707.html – miku
Канонический вопрос для разности делений Python 2-vs-3 [Как заставить деление быть плавающей точкой в Python? Отдел продолжает округлять до 0] (https://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python-division-keeps-rounding) – smci