Porque 1.1 no se puede representar en forma binaria exactamente; la aproximación es un poco más alta que 1.1, por lo tanto, el resultado de la división es un poco demasiado pequeño.
intente lo siguiente:
Bajo Python 2, el tipo en la consola:
>>> 1.1
1.1000000000000001
En Python 3.1, la consola mostrará 1.1
, pero internamente, sigue siendo el mismo número.
Pero:
>>> 11/1.1
10.0
Como gnibbler señala, esto es el resultado de "redondeo interno" dentro de los límites de precisión disponibles de flotadores. Y como The MYYN señala en su comentario, //
usa un algoritmo diferente para calcular el resultado de división de piso que math.floor()
para preservar a == (a//b)*b + a%b
de la mejor manera posible.
Utilice el tipo Decimal
si necesita esta precisión.
http://mail.python.org/pipermail/python-dev/2007-January/070707.html – miku
La pregunta canónica para la diferencia de división Python 2-vs-3 es [¿Cómo puedo forzar a la división a ser punto flotante? en Python? La división sigue redondeando a 0] (https://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python-division-keeps-rounding) – smci