0
$r = 302 / 490;
printLn($r);
printLn(round($r, 2, PHP_ROUND_HALF_UP));

与える

0.61632653061224484947189239392173476517200469970703125 0.61999999999999999555910790149937383830547332763671875

本当に2桁に通常の丸めをしないのはなぜですか?

4

2 に答える 2

2

浮動小数点数の測定可能な精度の範囲内で、示されている丸められた数は0.62です。正確0.62に取得できない理由を理解するには、浮動小数点数がどのように機能するかを理解する必要があります。基本的に、2 53 -1までの任意の大きさの整数を取り、-1074から971(両端を含む)までの任意の2の累乗を掛けることができます。0.62この方法で正確に表現することはできません。

言い換えれば、precisionINI設定が高すぎます。このコードパッドを参照してください。デフォルトの15など、よりわかりやすい数値に設定してみてください。

于 2012-10-16T13:53:03.540 に答える
0

printLnの代わりにprintを使用してコードを試しましたが、これが得られたものです。

0.61632653061224
0.62

printLn(これはJava印刷です)の代わりにprintを使用してコードを変更してみてください。

于 2012-10-16T13:52:10.827 に答える