Módulo decimal do Python nos auxilia na divisão com precisão adequada e arredondamento de números.
Módulo decimal do Python
Nesta lição sobre o módulo decimal em Python, veremos como podemos gerenciar números decimais em nossos programas para precisão, formatação e realização de cálculos. A precisão com números decimais é muito fácil de perder se os números não forem manipulados corretamente. Vamos ver como o módulo decimal do Python e suas funções disponíveis ajudam nessas áreas.
Trabalhando com números decimais
Números decimais são simplesmente 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 preciso com números decimais.
Necessidade do módulo decimal
Antes de realmente colocar este módulo em uso, vamos ver qual é a precisão com a qual estamos lidando e estabelecer por que realmente precisamos deste módulo. Dê uma olhada no trecho de código a seguir:
division = 72 / 7
print(division)
Vamos ver a saída para este programa: Bem, a resposta não foi realmente precisa e não havia pontos decimais! Vamos ver como podemos corrigir isso usando o módulo decimal.
Usando o módulo decimal
Em todos os programas que faremos neste post, estaremos importando o módulo decimal em todos eles:
import decimal
Pode ser o caso de que só importemos uma função específica deste módulo. Isso pode ser feito da seguinte forma:
from decimal import Decimal
Vamos começar a inserir o módulo decimal em alguns programas.
Exemplo de módulo decimal em Python
Começaremos com exemplos relacionados ao módulo agora.
Correção da Divisão com decimais
Aqui, vamos corrigir 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 ficará assim:
import decimal
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
Vamos ver a saída para este programa: Para perceber, a divisão está correta agora e precisa também, ou talvez seja muito precisa?
Controlando a Precisão para uma única operação
No último programa, havia 25 casas decimais na resposta agora. Mas e se quiséssemos apenas até três casas de valores decimais? Isso também pode ser controlado. Aqui, vamos controlar a precisão da resposta que não refletirá em outras operações em 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)
Fizemos a operação de divisão duas vezes para provar um ponto. Vamos ver a saída para este programa: Notou algo? A precisão que definimos era válida apenas para uma única vez. Na próxima vez que fizemos a divisão, obtivemos o mesmo resultado.
Controlando a Precisão 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)
Vamos ver a saída para este programa:
Arredondando os números
É possível arredondar os números com elegância usando a função round(...)
. Vamos tentar:
import decimal
#Pode ser arredondado para 13,48 ou 13,49
rounded = round(13.485, 2)
print(rounded)
Vamos ver a saída para este programa: O número no programa pode ser arredondado para 13,48 ou 13,49. Por padrão, a função
round(...)
arredonda para baixo. Isso também pode ser alterado:
import decimal
#Pode ser arredondado para 13,48 ou 13,49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))
Vamos ver a saída para este programa:
Obtendo o Contexto Decimal do Python
Se você estiver interessado em verificar o contexto padrão definido por padrão para o módulo decimal, você pode usar o seguinte script:
from decimal import *
print(getcontext())
Vamos ver a saída deste programa: Isso é tudo para o módulo decimal do Python, é muito útil ao trabalhar com números de ponto flutuante.
Source:
https://www.digitalocean.com/community/tutorials/python-decimal-division-round-precision