Pesquisa de site

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

Artigos relacionados: