Como usar o módulo decimal em python

Como usar o módulo decimal em python
Este artigo abordará um guia sobre o uso do módulo "decimal" em Python. Ele pode ser usado para executar várias operações matemáticas em números de ponto flutuante ou números contendo pontos decimais. Todas as amostras de código deste artigo são testadas com Python 3.9.5 no Ubuntu 21.04.

Sobre o módulo decimal

O módulo decimal, como o nome sugere, pode ser usado para lidar com números com pontos decimais ou números de tipo flutuante. Os métodos incluídos neste módulo ajudam a arredondar números decimais, converter números e executar cálculos aritméticos. Ele também se concentra muito em precisão e precisão e cada número após um ponto decimal é considerado significativo. O módulo decimal considera um número como 1.40 como 1.40 e não como 1.4. O uso do módulo decimal pode ser melhor compreendido através de exemplos. Alguns deles são explicados abaixo.

Realizando cálculos matemáticos básicos usando o módulo decimal

Você pode chamar o construtor decimal para converter um número em um tipo decimal em python. O exemplo de código abaixo mostra a diferença entre a divisão matemática básica feita em números inteiros do tipo e números de tipo decimal.

de importação decimal decimal
a = 10
b = 11
c = a / b
d = decimal (a) / decimal (b)
Imprimir (C, Tipo (C))
Imprimir (D, Tipo (D))

A primeira declaração importa a classe decimal do módulo decimal. Em seguida, duas variáveis ​​“A” e “B” são criadas com alguns valores. A variável “C” armazena um valor produzido dividindo a variável A por B. O mesmo processo é então repetido convertendo os números em objetos do tipo decimal. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

0.9090909090909091
0.909090909090909090909090909091

Como você pode ver na saída acima, o objeto do tipo float mostra números com menos precisão do que o objeto de tipo decimal, pois usa um método de aproximação muito mais agressivo do que o objeto de tipo decimal. Por padrão, um número de tipo decimal no Python aparece até 28 números. Você pode alterar esse valor de acordo com sua necessidade, chamando o método "getContext" disponível no módulo decimal.

de importação decimal decimal
De importar decimal getContext
getContext ().Prec = 50
a = 10
b = 11
c = a / b
d = decimal (a) / decimal (b)
Imprimir (C, Tipo (C))
Imprimir (D, Tipo (D))

Na amostra de código acima, a função GetContext foi importada e a posição de precisão foi configurada para até 50 posições. O método getContext pode ser usado para visualizar o contexto atual no encadeamento e alterar alguns dos parâmetros de configuração padrão para o módulo decimal. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

0.9090909090909091
0.909090909090909090909090909090909090909090909090909091

Você pode executar qualquer tipo de cálculo aritmético com objetos do tipo decimal que você possa executar com objetos do tipo float em Python. O grande número de números decimais à direita em objetos do tipo decimal pode trazer números precisos Pinpoint que são especialmente úteis em aplicações científicas financeiras, contábeis e de missão crítica e assim por diante.

Observe que você pode criar números de tipo decimal a partir de carros alegóricos, números inteiros e strings que contêm números chamando o construtor decimal principal.

Arredondando os números usando o módulo decimal

O módulo decimal vem com alguns modos de arredondamento predefinidos que você pode usar para arredondar números com pontos decimais. Esses modos são chamados redond_floor, redond_celing, redond_half_down, redond_half_up, round_up, redond_down, redond_half_even e redond_05up. De acordo com a documentação oficial do Python, eis o que cada um desses modos faz:

  • Round_floor: o número é arredondado para o infinito negativo.
  • Round_CELEING: O número é arredondado para o infinito ou o infinito positivo.
  • Round_half_down: Os números são arredondados para o número mais próximo. Se houver um empate, o número será arredondado para zero. Laços são números equidistantes que podem ser arredondados para cima ou para baixo. Por exemplo, um número como 4.25 pode ser arredondado para os dois.2 e 4.3.
  • Redond_half_up: os números são arredondados para o número mais próximo. Se houver um empate, o número será arredondado para longe de zero.
  • Round_Up: o número é arredondado para longe de zero.
  • Round_down: o número é arredondado para zero.
  • Round_Half_Even: Os números são arredondados para o número mais próximo. Quaisquer laços são arredondados para o número inteiro mais próximo.
  • Redond_05up: os números são arredondados para longe de zero se o último número for 0 ou 5. Caso contrário, os números são arredondados para zero.

O exemplo de código abaixo mostra o comportamento desses modos.

importação decimal
de importação decimal decimal
De importar decimal getContext
getContext ().Prec = 2
getContext ().arredondamento = decimal.Redond_floor
Impressão (decimal (3.961) + decimal (0))
getContext ().arredondamento = decimal.Redond_celing
Impressão (decimal (3.961) + decimal (0))
getContext ().arredondamento = decimal.Redond_half_down
Impressão (decimal (3.705) + decimal (0))
getContext ().arredondamento = decimal.Redond_half_up
Impressão (decimal (3.775) + decimal (0))
getContext ().arredondamento = decimal.ARREDONDAR PARA CIMA
Impressão (decimal (3.775) + decimal (0))
getContext ().arredondamento = decimal.ARREDONDAR PARA BAIXO
Impressão (decimal (3.609) + decimal (0))
getContext ().arredondamento = decimal.Redond_half_even
Impressão (decimal (3.665) + decimal (0))
getContext ().arredondamento = decimal.Redond_05up
Impressão (decimal (3.675) + decimal (0))

A amostra de código é bem direta. Uma precisão de 2 dígitos está definida para arredondar os números. O método de arredondamento é alterado definindo o valor do objeto "arredondamento" (parte do contexto principal). Depois de executar a amostra de código acima, você deve obter a seguinte saída onde cada linha corresponde ao respectivo modo de arredondamento:

3.9
4.0
3.7
3.8
3.8
3.6
3.7
3.6

Arredondando usando o método quantize

Você também pode usar o método "quantizar" disponível no módulo decimal para arredondar os números. O processo é idêntico ao método explicado acima. No entanto, em vez de definir números de precisão separadamente, você pode fornecer um expoente como um argumento ao método quantize para arredondar um número a uma posição específica. Abaixo está uma amostra de código.

importação decimal
de importação decimal decimal
arredondado = decimal (3.961).quantizar (decimal ('1.0 '), arredondamento = decimal.Redond_floor)
Imprimir (arredondado)

Um expoente de '1.0 'foi fornecido ao método de quantização e um método de arredondamento foi fornecido como um argumento extra. Ele retornará um número em x.X formato. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

3.9

Comparando dois números decimais

Você pode comparar quaisquer dois objetos do tipo decimal usando o método "compare" disponível no módulo decimal. Os exemplos abaixo mostram seu uso.

de importação decimal decimal
Impressão (decimal (1.2).Compare (decimal (1.1)))
Impressão (decimal (1.0).Compare (decimal (1.1)))
Impressão (decimal (1.0).Compare (decimal (1.0)))

Você pode chamar o método de comparação em um objeto de tipo decimal e fornecer o outro número como um argumento. Um valor de 0, 1 ou -1 será retornado, dependendo dos números comparados. Um valor 0 indica que ambos os números são iguais, um valor 1 indica que o primeiro número é maior que o segundo número, e um valor de -1 indica que o primeiro número é menor que o segundo número. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

1
-1
0

Conclusão

Embora o módulo decimal seja mais comumente usado para controlar a precisão decimal e completar números após o ponto decimal, ele vem com outros métodos úteis que podem ser usados ​​para manipular números decimais para produzir resultados precisos de cálculos aritméticos. O uso básico do módulo decimal foi abordado neste artigo e deve ser suficiente para a maioria das situações. Mas você sempre pode ler mais sobre os métodos avançados da documentação oficial do Python.