Python decimal - divisão, arredondamento, precisão
O módulo decimal Python nos ajuda na divisão com precisão adequada e arredondamento de números.
módulo decimal Python
Trabalhando com números decimais
Números decimais são apenas os números de ponto flutuante com pontos decimais fixos. Devemos arredondar os números corretamente com base em nossa necessidade, caso contrário, os resultados podem ser inesperados. O módulo decimal do Python nos ajuda a ser mais precisos com números decimais.
Necessidade de módulo decimal
Antes de realmente colocar este módulo em uso, vamos ver de que precisão estamos falando e estabelecer por que realmente precisamos deste módulo. Observe o trecho de código a seguir:
division = 72 / 7
print(division)
Usando o módulo decimal
Em todos os programas que fizermos neste post, estaremos importando o módulo decimal em todos eles:
import decimal
Pode ser que importemos apenas uma função específica deste módulo. Isso pode ser feito como:
from decimal import Decimal
Vamos começar colocando o módulo decimal em alguns programas.
Exemplo de módulo decimal do Python
Começaremos com exemplos relacionados ao módulo agora.
Corrigindo divisão com decimais
Aqui, corrigiremos o programa que escrevemos acima para realizar a divisão que deveria ter produzido um resultado de ponto flutuante. O programa modificado com o módulo decimal se parecerá com:
import decimal
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
Precisão de controle para operação única
No último programa, havia 25 casas decimais na resposta agora. Mas e se quiséssemos apenas até três casas decimais? Isso também pode ser controlado. Aqui, controlaremos a precisão da resposta que não refletirá em outras operações do nosso 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)
Precisão de controle para o programa completo
Também é possível controlar a precisão globalmente no programa. Isso não é recomendado o tempo todo quando você está lidando com muitos números em seu programa. Aqui está um exemplo:
import decimal
decimal.getcontext().prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
Arredondando os números
É possível arredondar graciosamente os números com a função round(...)
. Vamos tentar:
import decimal
#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(rounded)
import decimal
#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))
Obtendo o contexto decimal do Python
Se você estiver interessado em ver o contexto padrão definido por padrão para o módulo decimal, poderá usar o seguinte script:
from decimal import *
print(getcontext())