Pythonのラウンド関数で問題に直面しています。答えを実行して 2 桁で丸めるとround(0.715,2)
0.71、同様に実行するround(0.615,2)
と結果は 0.61 です。しかし、実行するround(0.515,2)
と 0.52 になり、同様にround(0.915,2)
結果は 0.92 になります。
誰かがこれを説明できますか?
Pythonのラウンド関数で問題に直面しています。答えを実行して 2 桁で丸めるとround(0.715,2)
0.71、同様に実行するround(0.615,2)
と結果は 0.61 です。しかし、実行するround(0.515,2)
と 0.52 になり、同様にround(0.915,2)
結果は 0.92 になります。
誰かがこれを説明できますか?
これは、使用している数値の浮動小数点近似によるものです。10 進数の有効桁数は最大 16 桁までです。ご覧のとおり、最初の 2 つはわずかに下にあり、次の 2 つはわずかに上にあります
>>> "%.20f"%0.715
'0.71499999999999996891'
>>> "%.20f"%0.615
'0.61499999999999999112'
>>> "%.20f"%0.515
'0.51500000000000001332'
>>> "%.20f"%0.915
'0.91500000000000003553'
より良い動作が必要な場合は、decimal
モジュールの使用を検討してください
一般的なコンピューターに実装されている浮動小数点数は正確ではありません。したがって、5.15 と書くと、実際には (コンピュータにとって) 5.1499999999 と同じになる可能性があります。Python などのプログラミング言語がこれらの数値を出力するとき、小数点以下の桁数を四捨五入することを決定するため、正確な数値を取得したと思いますが、そうではありません。
参照: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html (「すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと」)