Test: Descubre qué bootcamp es para ti

whatsapp keepcoding

¿Qué significa import decimal en Python?

| Última modificación: 10 de enero de 2025 | Tiempo de Lectura: 3 minutos

Al trabajar con números flotantes en Python me he encontrado con resultados extraños al sumar 1,1 y 2,2, como 3.3000000000000003. Este problema se presenta por la forma en como se representan los números en coma flotante binaria. Este problema es fácil de solucionar y hoy te voy a enseñar a usar el módulo import decimal para que no te vuelvas a preocupar por este tipo de situaciones jamás. En este artículo te explicaré qué es import decimal y cómo funciona.

import decimal en Python

¿Qué es el módulo de import decimal?

El módulo de import decimal dentro de Python funciona como una calculadora de precisión que evita errores comunes que se pueden presentar con números flotantes. Si usas números como 0,1 en cálculos, la representación binaria puede tender a generar errores de redondeo que se acumulan en operaciones más complejas. Con import decimal puedes trabajar con números decimales de forma más precisa y así asegurarte de que 0,1 + 0,1 + 0,1 * 0.3 sea exactamente igual a 0. En aplicaciones financieras o científicas en donde hay que siempre abogar por la precisión, el import decimal se torna súper útil.

¿Cómo funciona el import decimal?

A medida que usas el import decimal vas creando instancias de la clase Decimal en lugar de trabajar con flotantes corrientes. Esto hace que puedas controlar aspectoscomo la precisión y el redondeo. Veamos un ejemplo básico:

from decimal import Decimal, getcontext

# Configurar la precisión
getcontext().prec = 6

# Operaciones con Decimal
resultado = Decimal('1.1') + Decimal('2.2')
print(resultado) # Muestra: 3.3

En este ejemplo el import decimal te permite trabajar con números exactos y evitar así los errores comunes en cálculos financieros.

Algunas de las ventajas que puedes obtener al usar import decimal son:

  1. Precisión exacta
  2. Redondeo personalizable: Puedes elegir entre varios modos de redondeo como ROUND_UP, ROUND_DOWN, entre otros.
  3. Compatibilidad con formatos financieros: Mantiene ceros finales para representar dígitos significativos.

Configuración avanzada del módulo

El import decimal también nos permite ajustar la configuración global con la finalidad de satisfacer necesidades muy específicas. Por ejemplo, si queremos establecer una precisión predeterminada y las reglas del redondeo, debemos hacer esto:

from decimal import getcontext

# Configuración global
contexto = getcontext()
contexto.prec = 10 # Establece la precisión a 10 dígitos
contexto.rounding = 'ROUND_HALF_UP'

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

También puedes usar contextos locales para cambiar temporalmente la configuración:

from decimal import localcontext

with localcontext() as ctx:
ctx.prec = 5
print(Decimal('1.23456789') + Decimal('2.3456789')) # Resultado: 3.5802

Decimal y float: análisis comparativo

Para entender mejor la importancia de decimal, echemos un vistazo a cómo se comporta frente a los flotantes estándar:

# Usando flotantes
print(0.1 + 0.1 + 0.1 - 0.3) # Resultado: 5.551115123125783e-17

# Usando decimal
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')) # Resultado: 0.0

Así pues, tenemos algunas diferencias como:

  • Exactitud: Los flotantes no pueden representar algunos números de manera exacta, mientras que decimal sí.
  • Uso de memoria: decimal consume más memoria, pero ofrece mayor precisión.
  • Velocidad: Los cálculos con decimal pueden ser más lentos debido a su precisión.

Un resumen en forma de cuadro comparativo es la mejor manera de entenderlo:

Aspectodecimalfloat
PrecisiónAlta precisión y control sobre el número de dígitos significativos. Ideal para cálculos financieros y científicos.Representación aproximada debido al formato binario, lo que puede generar errores de redondeo.
ExactitudExacto en cálculos con números decimales comunes (por ejemplo, 0.1, 0.2).No exacto en cálculos con decimales comunes (por ejemplo, 0.1 + 0.2 puede dar 0.30000000000000004).
RendimientoMás lento debido a la precisión y al manejo de operaciones complejas.Más rápido, optimizado para operaciones matemáticas estándar.
Uso recomendadoCálculos financieros, monetarios y aplicaciones que requieren precisión estricta.Cálculos científicos, gráficos y operaciones donde la velocidad es prioritaria y la precisión puede ser aproximada.
Control de redondeoOfrece opciones personalizables de redondeo, como ROUND_UP, ROUND_DOWN, etc.Limitado; no tiene control directo sobre el redondeo.
Representación exactaRepresenta exactamente números decimales como 0.1, 1.1, 2.2, etc.No puede representar exactamente ciertos números decimales debido a la base binaria.
Valores especialesManeja valores como NaN, Infinity, -Infinity, y ceros con signo (+0 y -0).También maneja NaN, Infinity, pero no distingue entre +0 y -0.
Ajuste de precisiónLa precisión es configurable usando getcontext().prec.La precisión está fija y depende del estándar IEEE 754.
Biblioteca estándarRequiere importar el módulo decimal para usarlo.Incorporado directamente en Python sin necesidad de importación.

En nuestra academia creemos que puedes cambiar tu vida en unos pocos meses, solo tienes que inscribirte en el bootcamp de programación desde cero, con el cual pasarás de cero a experto en el sector tecnológico y podrás incursionar en un mercado laboral bastante prolífico. No dudes en escribirnos para acceder a más información y prepárate para dar el gran paso hacia tu futuro.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a programar desde cero

Full Stack JR. Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado