O módulo decimal do Python é usado para resolver os resultados dos cálculos que aparecem em muito 0,9999, causando uma precisão imprecisa

Porque Python usa números de ponto flutuante de precisão dupla para armazenar decimais. No padrão IEEE 754 (52M / 11E / 1S) usado pelo Python, o espaço de armazenamento de 8 bytes de 64 bits é alocado 52 bits para armazenar os dígitos significativos do número de ponto flutuante, 11 bits para armazenar o expoente e 1 bit para armazenar o sinal, que é uma versão binária do formato de notação científica. Embora 52 dígitos significativos pareçam muito, o problema é que os decimais binários tendem a loops infinitos quando representam números racionais. Muitos deles são limitados em decimais decimais, como 1/10 de decimal, que pode ser simplesmente escrito como 0,1 em decimal, mas em binário, deve ser escrito como: 0,000110011001100110011001100110011001100110011001100110011001 ... (todos os seguintes são 1001 ciclos) . Como os números de ponto flutuante têm apenas 52 dígitos significativos, eles são arredondados a partir do 53º dígito. Isso causou o problema de "perda de precisão de ponto flutuante" mencionado no título. A regra de arredondamento é "0 arredondamento 1", então às vezes é um pouco maior e às vezes um pouco menor.


Por exemplo:

print(350*1.4)

O resultado é: 489.99999999999994

Melhorias de código:

import decimal 
a = decimal.Decimal('350')
b = decimal.Decimal('1.4')
c = a * b    
print(c)

O resultado é: 490,0

Acho que você gosta

Origin blog.csdn.net/weixin_43283397/article/details/108362940
Recomendado
Clasificación