Pythonのdecimalモジュールは、多くの.9999が表示される計算結果を解決するために使用され、不正確な精度を引き起こします

Pythonは倍精度浮動小数点数を使用して小数を格納するためです。Pythonで使用されるIEEE754標準(52M / 11E / 1S)では、8バイトの64ビットストレージスペースには、浮動小数点数の有効桁を格納するために52ビット、指数を格納するために11ビット、および1が割り当てられます。科学的記数法形式のバイナリバージョンである記号を格納するビット。有効数字52桁が多いように見えますが、問題は、有理数を表すときに2進数が無限ループになりやすいことです。それらの多くは、10進数の1/10など、10進数で制限されており、10進数で0.1と簡単に記述できますが、2進数では、0.0001100110011001100110011001100110011001100110011001 ...(以下はすべて1001サイクル)と記述する必要があります。 。浮動小数点数は有効数字が52桁しかないため、53桁目から四捨五入されます。これにより、タイトルに記載されている「浮動小数点精度の低下」の問題が発生しました。四捨五入のルールは「0四捨五入1」なので、少し大きい場合と少し小さい場合があります。


例えば:

print(350*1.4)

結果は次のとおりです:489.99999999999994

コードの改善:

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

結果は次のとおりです:490.0

おすすめ

転載: blog.csdn.net/weixin_43283397/article/details/108362940