Pregunta

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

¿Qué está pasando aquí? ¿Cómo convierto 0.47000000000000003 de cuerda y la parte trasera valor resultante para flotar?

Estoy usando Python 2.5.4 en Windows.

¿Fue útil?

Solución

str(0.47000000000000003) dar '0.47' y float('0.47') puede ser 0.46999999999999997. Esto se debe a la forma en que se representa el número de coma flotante (véase este artículo de Wikipedia href="http://en.wikipedia.org/wiki/IEEE_754" rel="noreferrer"> )

Nota: float(repr(0.47000000000000003)) o eval(repr(0.47000000000000003)) le dará el resultado esperado, pero se debe usar decimal si necesita precisión.

Otros consejos

flotador (y doble) no tienen una precisión infinita. Naturalmente, los errores de redondeo se producen cuando se opera en ellos.

Este es un Python Preguntas

La misma pregunta surge bastante regularmente en comp.lang.python también.

Creo que la razón es un FAQ es que debido a pitón es perfecto en todos los demás aspectos ;-), esperamos que para llevar a cabo la aritmética perfectamente - al igual que nos enseñaron en la escuela. Sin embargo, como cualquier persona que ha hecho un curso de métodos numéricos le dirá, números de coma flotante están muy lejos de ser perfecta.

decimal es una buena alternativa y si quieres más velocidad y más opciones < a href = "http://gmpy.sourceforge.net/" rel = "nofollow noreferrer"> gmpy es grande también.

por este ejemplo Creo que esto es un error en Python cuando se divide

    >>> print(int(((48/5.0)-9)*5))
    2

el camino más fácil, que resuelve este problema mediante este

    >>> print(int(round(((48/5.0)-9)*5,2)))
    3
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top