Cómo usar el módulo decimal en Python

Cómo usar el módulo decimal en Python
Este artículo cubrirá una guía sobre el uso del módulo "decimal" en Python. Se puede usar para ejecutar varias operaciones matemáticas en números de puntos flotantes o números que contienen puntos decimales. Todas las muestras de código en este artículo se prueban con Python 3.9.5 en Ubuntu 21.04.

Sobre el módulo decimal

El módulo decimal, como su nombre indica, se puede usar para manejar números que tienen puntos decimales o números de tipo flotante. Los métodos incluidos en este módulo ayudan a redondear números decimales, convertir números y realizar cálculos aritméticos. También se centra mucho en la precisión y la precisión y cada número después de un punto decimal se considera significativo. El módulo decimal considera un número como 1.40 como 1.40 y no como 1.4. El uso del módulo decimal se puede entender mejor a través de ejemplos. Algunos de ellos se explican a continuación.

Realización de cálculos matemáticos básicos utilizando el módulo decimal

Puede llamar al constructor decimal para convertir un número a un tipo decimal en Python. La muestra de código a continuación muestra la diferencia entre la división matemática básica realizada en los números de tipo entero y los números de tipo decimal.

de decimal importación decimal
a = 10
b = 11
C = A / B
d = decimal (a) / decimal (b)
Imprimir (c, tipo (c))
Imprimir (D, Tipo (D))

La primera declaración importa la clase decimal del módulo decimal. A continuación, se crean dos variables "A" y "B" con algunos valores. La variable "C" almacena un valor producido al dividir la variable A por B. Luego se repite el mismo proceso convirtiendo los números en objetos de tipo decimal. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

0.9090909090909091
0.9090909090909090909090909091

Como puede ver en la salida anterior, el objeto de tipo flotante muestra números con menos precisión que el objeto de tipo decimal, ya que utiliza un método de aproximación mucho más agresivo que el objeto de tipo decimal. Por defecto, un número de tipo decimal en Python muestra hasta 28 números. Puede cambiar este valor de acuerdo con sus necesidades llamando al método "getContext" disponible en el módulo decimal.

de decimal importación decimal
Desde decimal import getContext
getContext ().prec = 50
a = 10
b = 11
C = A / B
d = decimal (a) / decimal (b)
Imprimir (c, tipo (c))
Imprimir (D, Tipo (D))

En la muestra de código anterior, la función getContext se ha importado y la posición de precisión se ha establecido en hasta 50 posiciones. El método getContext se puede usar para ver el contexto actual en el subproceso y cambiar algunos de los parámetros de configuración predeterminados para el módulo decimal. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

0.9090909090909091
0.90909090909090909090909090909090909090909090909091

Puede realizar cualquier tipo de cálculos aritméticos con objetos de tipo decimal que pueda realizar con objetos de tipo flotante en Python. La gran cantidad de números decimales finales en objetos de tipo decimal puede traer números precisos precisos que son especialmente útiles en aplicaciones científicas financieras, contables, críticas, etc.

Tenga en cuenta que puede crear números de tipo decimal a partir de flotadores, enteros y cadenas que contienen números llamando al constructor decimal principal.

Redondeando números usando el módulo decimal

El módulo decimal viene con algunos modos de redondeo predefinidos que puede usar para redondear números con puntos decimales. Estos modos se llaman Round_floor, Round_ceiling, Round_half_down, Round_half_up, Round_up, Round_down, Round_half_even y Round_05Up. Según la documentación oficial de Python, esto es lo que hace cada uno de estos modos:

  • Round_floor: el número se redondea hacia el infinito negativo.
  • Round_ceiling: el número se redondea hacia el infinito o el infinito positivo.
  • Round_half_down: los números se redondean al número más cercano. Si hay un empate, el número se redondea hacia cero. Los lazos son números equidistantes que se pueden redondear tanto hacia arriba como hacia abajo. Por ejemplo, un número como 4.25 se pueden redondear hacia ambos 4.2 y 4.3.
  • Round_half_up: los números se redondean al número más cercano. Si hay un empate, el número se redondea de cero.
  • Round_Up: el número se redondea de cero.
  • Round_down: el número se redondea hacia cero.
  • Round_half_even: los números se redondean al número más cercano. Cualquier vínculo se redondea al número integerio más cercano.
  • Round_05Up: los números se redondean de cero si el último número es 0 o 5. Si no, entonces los números se redondean hacia cero.

La muestra de código a continuación muestra el comportamiento de estos modos.

importación decimal
de decimal importación decimal
Desde decimal import getContext
getContext ().prec = 2
getContext ().redondeo = decimal.Round_floor
Imprimir (decimal (3.961) + decimal (0))
getContext ().redondeo = decimal.Ronda_cheiling
Imprimir (decimal (3.961) + decimal (0))
getContext ().redondeo = decimal.Round_half_down
Imprimir (decimal (3.705) + decimal (0))
getContext ().redondeo = decimal.Ronda_half_up
Imprimir (decimal (3.775) + decimal (0))
getContext ().redondeo = decimal.REDONDEO
Imprimir (decimal (3.775) + decimal (0))
getContext ().redondeo = decimal.REDONDEAR A LA BAJA
Imprimir (decimal (3.609) + decimal (0))
getContext ().redondeo = decimal.Ronda_half_even
Imprimir (decimal (3.665) + decimal (0))
getContext ().redondeo = decimal.Ronda_05UP
Imprimir (decimal (3.675) + decimal (0))

La muestra de código es bastante sencilla. Se establece una precisión de 2 dígitos para redondear los números. El método de redondeo se cambia estableciendo el valor del objeto "redondeo" (parte del contexto principal). Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida donde cada línea corresponde al modo de redondeo respectivo:

3.9
4.0
3.7
3.8
3.8
3.6
3.7
3.6

Redondeado utilizando el método de cuantización

También puede usar el método "Quantize" disponible en el módulo decimal para redondear los números. El proceso es idéntico al método explicado anteriormente. Sin embargo, en lugar de establecer números de precisión por separado, puede suministrar un exponente como argumento al método de cuantificación para redondear un número a una posición particular. A continuación se muestra una muestra de código.

importación decimal
de decimal importación decimal
redondeado = decimal (3.961).Cuantizar (decimal ('1.0 '), redondeo = decimal.Round_floor)
Imprimir (redondeado)

Un exponente de '1.0 'se ha suministrado al método de cuantización y se ha suministrado un método de redondeo como argumento adicional. Devolverá un número en x.X formato. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

3.9

Comparando dos números decimales

Puede comparar cualquier objeto de dos decimales utilizando el método "Comparar" disponible en el módulo decimal. Los ejemplos a continuación muestran su uso.

de decimal importación decimal
Imprimir (decimal (1.2).Comparar (decimal (1.1)))
Imprimir (decimal (1.0).Comparar (decimal (1.1)))
Imprimir (decimal (1.0).Comparar (decimal (1.0)))

Puede llamar al método de comparación en un objeto de tipo decimal y suministrar el otro número como argumento. Se devolverá un valor de 0, 1 o -1 dependiendo de los números que se comparan. Un valor de 0 indica que ambos números son iguales, un valor de 1 indica que el primer número es mayor que el segundo número, y un valor de -1 indica que el primer número es menor que el segundo número. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

1
-1
0

Conclusión

Aunque el módulo decimal se usa más comúnmente para controlar la precisión decimal y para redondear números después del punto decimal, viene con algunos otros métodos útiles que se pueden usar para manipular números decimales para producir resultados precisos de los cálculos aritméticos. El uso básico del módulo decimal se ha cubierto en este artículo y debería ser suficiente para la mayoría de las situaciones. Pero siempre puede leer más sobre los métodos avanzados de la documentación oficial de Python.