¿Por qué python decimal.La precisión decimal difiere con argumentos comparables?

Aquí está mi entrada:

>>> from decimal import Decimal >>> Decimal('114.3') Decimal('114.3') >>> Decimal(114.3) Decimal('114.2999999999999971578290569595992565155029296875') 

Pensé que esas dos instancias de Decimal tienen que ser iguales pero Decimal con float arg parece perder precisión. ¿Por qué es esto? Mi versión de python es 2.7.3. ¡Gracias por adelantado!

La segunda línea le da el valor decimal exacto del número binario de punto flotante que se aproxima a 114.3. Esto es casi todo sobre punto flotante binario, no mucho sobre Decimal. Vea los documentos para más detalles.

Más tarde: si usa Python 3, vea estos documentos en su lugar. Lo mismo básico, pero Python 3 tiene más herramientas para ayudarte a explorar casos “como este”.

Cuando haces Decimal(114.3) , estás creando un objeto flotante normal y luego pasándolo a Decimal. La precisión se pierde debido a la imprecisión de punto flotante binario cuando se crea el flotador 114.3, antes de que Decimal llegue a verlo. No hay manera de recuperar esa precisión. Es por eso que Decimal acepta representaciones de cadena como entrada, para que pueda ver lo que realmente escribió y usar el nivel correcto de precisión.