Como solucionar a precisão de decimais em Python?

É comum que o programador que está iniciando em Python tenha problemas ao realizar operações aritméticas entre números decimais.

Por exemplo, ao somar 0.1 com 0.2, esperamos o resultado como 0.3, porém não é o que ocorre em Python.

Veja:

resultado = 0.1 + 0.2
print(resultado) # 0.30000000000000004

Podemos ver o mesmo problema em operações de subtração:

resultado = 0.3 - 0.1
print(resultado) # 0.19999999999999998

Isso não ocorre especificamente por culpa do Python. Em outras linguagens de programação, o mesmo pode ocorrer. Na verdade, isso ocorre por causa da forma que os computadores representam um número em ponto flutuante.

Mas, felizmente, podemos solucionar isso de maneira bem simples em Python!

Resolvendo o problema da precisão de números decimais

Para resolver isso, podemos simplesmente utilizar o módulo decimal.

De acordo com a documentação do módulo decimal, podemos ler o seguinte (tradução livre):

O módulo decimal fornece suporte para aritmética de numeros decimais corretamente arredondados. Ele oferece várias vantagens sobre o tipo float.

Exemplo:

from decimal import Decimal

soma = Decimal('0.1') + Decimal('0.2') print(soma) # 0.3

Nota: É importante observar que os números decimais informados em Decimal devem ser sempre uma str com a representação do número. Se utilizassemos 0.1, que é um valor float nativo, ao invés de '0.1', o resultado do cálculo seria diferente do esperado.