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