Python error al restar (ajustar la precisión).

Parece que Python tiene un error al restar. Pero no es así, realmente es una situación de precisión y te explicamos cómo resolverlo. Cuando realizamos una resta con decimales en Python, vemos como nos arroja un resultado que parece estar mal, o no ser del todo preciso.

Resumen, error al restar en Python.

El problema.

Al restar por ejemplo:

4.5 – 4.19 = 0.31

Python dice que es 0.3099999

La Solución.

Decirle a Python cuantos decimales queremos y en que variables los queremos.

from decimal import Decimal, getcontext
getcontext().prec = 3	# Trabajar con 3 decimales
a=4.5
b=4.19
res = Decimal(a)-Decimal(b)	# Indicamos que usaremos los decimales en a y b
print(res)       # Imprime: 0.310

El resultado es 0.310

Problema, error al restar en Python.

Vamos a hacer una resta cualquiera, usando números decimales:

Restamos:

4.5 – 4.1 = 0.4

Veamos qué resultado nos da Python:

a=4.5
b=4.1
res = a-b
print(res)

Python resta mal

Bueno es un resultado muy cercano, pero realmente está ocurriendo algo raro.

Veamos con más decimales. Restamos:

4.5 – 4.19 = 0.31

Vemos qué Python da como resultado 0.309999

a=4.5
b=4.19
res = a-b
print(res)   # Imprime: 0.30999999

Python resta mal

Como podemos notar, no podemos mostrarle al usuario 0.30999 en lugar de 0.31. Aunque podríamos redondear.

Si al momento de mostrar resultados al usuario, queremos un resultado más preciso, o bien esa pequeña variación tiene influencia sobre nuestro código, ese pequeño detalle en Python puede ocasionarnos varios dolores de cabeza.

Solución, indicar a cuantos decimales calcular Python.

Podemos encontrar varias soluciones, que pueden ser diferentes según la necesidad de nuestro código. Pero a continuación te mostramos una que puede funcionar en todos los casos.

Primero necesitaremos importar una librería. Esta librería nos ayudará a indicarle a Python hasta cuantos decimales queremos el resultado (getcontext) y que variables queremos que usen esos decimales (Decimal).

 from decimal import Decimal, getcontext

Para decirle a Python hasta cuantos decimales sea preciso, usamos el siguiente comando:

 getcontext().prec = 3

En el caso anterior indicamos que calcule con 3 decimales.

Luego vamos a realizar la resta. Para indicarle a Python que variables deben usar 3 decimales usamos el comando “Decimal()”.

from decimal import Decimal, getcontext
getcontext().prec = 3
a=4.5
b=4.19
res = Decimal(a)-Decimal(b)	##Estas variables con 3 decimales
print(res)

Ahora el resultado es 0.310

Python corrección resta

El comando:

getcontext().prec = 3

Lo podemos estar modificando cuantas veces sea necesario en el código.

De esta forma puedes hacer cálculos sin tener un sinfín de números decimales en Python. Solucionando el aparente error al momento de restar en Python.

Para más tutoriales de Python, ve a la sección de Python.