Los lenguajes de programación tienen diversos tipos de datos para manejar información numérica. El tipo entero (int
), real (float
) y python soporta otros como fracciones y complejos.
Hoy, sin embargo, quiero hablar del tipo decimal
. Los float
o de coma flotante, tiene varios problemas de precisión que no pueden tolerarse en ciertos tipos de aplicaciones como, por ejemplo, las que tienen que ver con finanzas.
Veamos un caso muy simple:
from decimal import Decimal
1.0 == 0.999999999999999999 # True
Decimal("1.0") == Decimal("0.999999999999999999") # False
Extendiendo sobre la clase decimal
, existe el módulo py-money
que adiciona a los números una moneda como USD
o COP
, permitiendo a las aplicaciones que así lo requieren, tener una precisión tan alta como se quiera.
Claro está que no es posible tener una precisión infinita en una computadora. Sin embargo, el módulo decimal
se puede ajustar a una precisión tan grande como se necesite:
print(getcontext().prec) # outpus 28 by default
Usé bastante el módulo decimal
y también la librería py-money
en un momento en que trabajaba en una aplicación financiera. Es correctamente soportada por django
y otros frameworks.