El módulo decimal de Python nos ayuda en la división con la precisión adecuada y el redondeo de números.
El módulo decimal de Python
En esta lección sobre el módulo decimal en Python, veremos cómo podemos manejar números decimales en nuestros programas para obtener precisión y formato, y también realizar cálculos. La precisión con los números decimales es muy fácil de perder si los números no se manejan correctamente. Veamos cómo el módulo decimal y sus funciones disponibles ayudan en estas áreas.
Trabajando con números decimales
Los números decimales son simplemente números de punto flotante con puntos decimales fijos. Debemos redondear correctamente los números según nuestras necesidades, de lo contrario, los resultados pueden ser inesperados. El módulo decimal de Python nos ayuda a ser más precisos con los números decimales.
Necesidad del módulo decimal
Antes de poner realmente este módulo en uso, veamos de qué precisión estamos hablando y establezcamos por qué realmente necesitamos este módulo. Observa el siguiente fragmento de código:
division = 72 / 7
print(division)
Vamos a ver la salida de este programa: Bueno, ¡la respuesta en realidad no fue precisa y no había puntos decimales en absoluto! Veamos cómo podemos corregir esto usando el módulo decimal.
Uso del módulo decimal
En todos los programas que hagamos en esta publicación, estaremos importando el módulo decimal en todos ellos:
import decimal
Puede ser el caso de que solo importemos una función específica de este módulo. Esto se puede hacer así:
from decimal import Decimal
Comencemos a incorporar el módulo decimal en algunos programas.
Ejemplo del módulo decimal en Python
Comenzaremos con ejemplos relacionados con el módulo ahora.
Corrección de la división con decimales
Aquí corregiremos el programa que escribimos anteriormente para realizar una división que debería haber producido un resultado de punto flotante. El programa modificado con el módulo decimal se verá así:
import decimal
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
Vamos a ver la salida de este programa: ¿Notaron que la división ahora es correcta y precisa, o tal vez es demasiado precisa?
Controlando la precisión para una sola operación
En el último programa, había 25 lugares decimales en la respuesta. Pero, ¿qué pasa si solo queremos hasta tres lugares de valores decimales? Esto también se puede controlar. Aquí controlaremos la precisión de la respuesta que no se reflejará en otras operaciones en nuestro programa:
import decimal
with decimal.localcontext() as ctx:
ctx.prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
Hicimos la operación de división dos veces para demostrar un punto. Veamos la salida de este programa: ¿Notaron algo? La precisión que establecimos solo fue válida por una sola vez. La próxima vez que hicimos la división, obtuvimos el mismo resultado.
Controlando la precisión para el programa completo
También es posible controlar la precisión globalmente en el programa. Esto no se recomienda todo el tiempo cuando estás tratando con muchos números en tu programa. Aquí tienes un ejemplo:
import decimal
decimal.getcontext().prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
Vamos a ver la salida para este programa:
Redondeando los números
Es posible redondear los números de forma elegante con la función round(...)
. Vamos a intentarlo:
import decimal
#Puede redondearse a 13.48 o 13.49
rounded = round(13.485, 2)
print(rounded)
Vamos a ver la salida para este programa: El número en el programa puede redondearse a 13.48 o 13.49. Por defecto, la función
round(...)
redondea hacia abajo. Esto también se puede cambiar:
import decimal
#Puede redondearse a 13.48 o 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))
Vamos a ver la salida para este programa:
Obteniendo el Contexto Decimal de Python
Si estás interesado en ver el contexto predeterminado establecido por defecto para el módulo decimal, puedes usar el siguiente script:
from decimal import *
print(getcontext())
Vamos a ver la salida de este programa: Eso es todo para el módulo decimal de Python, es muy útil cuando se trabaja con números de punto flotante.
Source:
https://www.digitalocean.com/community/tutorials/python-decimal-division-round-precision