Problema con funcion round
Josu Oyanguren
josu.oyng en gmail.com
Jue Feb 9 14:16:27 CET 2006
Hola,
en realidad no es un bug, es una característica.
Resulta que tal y como se almacenan en memoria los números de tipo "float",
a veces no es posible guardar el número exacto, y se guarda el número que sí
se puede más cercano al mismo. En la práctica, esto hace que cuando escribes
1.1 obtienes 1.1000000000000001
si miramos los valores que has metido:
In [1]:2.05
Out[1]:2.0499999999999998
In [2]:2.15
Out[2]:2.1499999999999999
In [3]:2.25
Out[3]:2.25
In [4]:2.35
Out[4]:2.3500000000000001
In [5]:2.45
Out[5]:2.4500000000000002
In [6]:2.55
Out[6]:2.5499999999999998
In [7]:2.65
Out[7]:2.6499999999999999
In [8]:2.75
Out[8]:2.75
In [9]:2.85
Out[9]:2.8500000000000001
In [10]:2.95
Out[10]:2.9500000000000002
Por esto, 2.55 va "para abajo" y 2.85 va "para arriba", o tienes otras
sorpresas como
In [11]:print 0.1*3 == 0.3
False
Si quieres emplear precisión exacta mira el módulo "decimal" de la librería
estándar.
Josu
(Pues no he tenido yo pocos quebraderos de cabeza por este tema)
Más información sobre la lista de distribución Python-es