3

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 になります。

誰かがこれを説明できますか?

4

2 に答える 2

9

これは、使用している数値の浮動小数点近似によるものです。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モジュールの使用を検討してください

于 2013-03-08T03:29:34.843 に答える
1

一般的なコンピューターに実装されている浮動小数点数は正確ではありません。したがって、5.15 と書くと、実際には (コンピュータにとって) 5.1499999999 と同じになる可能性があります。Python などのプログラミング言語がこれらの数値を出力するとき、小数点以下の桁数を四捨五入することを決定するため、正確な数値を取得したと思いますが、そうではありません。

参照: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html (「すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと」)

于 2013-03-08T03:30:14.420 に答える