2009-01-02 27 views
5

Mi código:de coma flotante Limitaciones

a = '2.3' 

quería mostrar a como un valor de punto flotante.

Desde a es una cadena, he intentado:

float(a) 

El resultado que obtuve fue:

2.2999999999999998 

Quiero una solución para este problema. Por favor, amablemente ayúdenme.

Yo estaba siguiendo this tutorial.

+0

@ rejinacm.myopenid.com: es posible que desee eliminar el comentario "Esto es un inconveniente de Python". ! –

+8

-1 a los fanáticos que rechazaron esta pregunta en lugar de solucionarla. –

+1

Duplicado: http://stackoverflow.com/questions/286061/python-decimal-place-issues-with-floats, http://stackoverflow.com/questions/286061/python-decimal-place-issues-with-floats –

Respuesta

18

Creo que se refleja más en su comprensión de los tipos de coma flotante que en Python. Consulte my article about floating point numbers (basado en .NET, pero sigue siendo relevante) por los motivos de esta "inexactitud". Si necesita conservar la representación decimal exacta, debe usar decimal module.

+0

decimal devuelve una cadena.Sólo quiero un tipo de letra flotante. – user46646

+0

@rejinacm - los tipos de flotación no son exactos, su documento realmente explica esto al final y explica por qué sucede esto. –

+0

Decimal no "devuelve" una cadena; usted * puede * convertirla en una cadena, pero un valor decimal es solo un valor, que puede manipular por separado, etc. Si realmente necesita flotar por alguna razón, debe aceptar que no vas a poder representar 2.3 exactamente en eso. –

6

Esto no es un inconveniente de Python, más bien, es un inconveniente de la forma en que los números de punto flotante se almacenan en una computadora. Independientemente del lenguaje de implementación, encontrará problemas similares.

Usted dice que quiere 'mostrar' A como un punto flotante, ¿por qué no simplemente mostrar la cadena? Visualmente será idéntico a lo que espera.

Como mencionó Jon, si sus necesidades son más que simplemente 'mostrar' el número de punto flotante, debe usar el módulo decimal para almacenar la representación exacta.

4

Excelentes respuestas que explican los motivos. Sólo deseo añadir una posible solución práctica de la librería estándar:

>>> from decimal import Decimal 
>>> a = Decimal('2.3') 
>>> print a 
2.3 

Esto es en realidad un F.A.Q. (muy) para Python y puedes read the answer here.


Editar: Me acabo de dar cuenta de que John Skeet ya lo mencionó. Oh, bueno ...

Cuestiones relacionadas