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)
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
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
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.