0

<?php echo 199.8 + 0.9 -200.7; //expect 0, result 2.8421709430404E-14 ? ?>

PHPバージョン5.3.2-1ubuntu4.7でテスト済み

4

3 に答える 3

7

スペースが制限された分数浮動小数点は、一部の値では不正確1/3です(10進表記では、有限空間に書き出すことができないのと同じように)。

2.8421709430404E-140に非常に近いです。

四捨五入するか、有効数字の数に出力します。

于 2011-06-15T10:26:05.363 に答える
2

正確な計算が必要な場合 (つまり、金銭取引の場合)、BCD (2 進化 10 進数) または任意精度の計算を使用する必要があります。PHP はBC Mathを使用してこれをサポートしています。

于 2011-06-15T10:51:27.980 に答える
0

http://www.php.net/manual/en/ref.bc.phpを使用した正確な例を次に示します。

<?php

$a = 199.8;
$b = 0.9;
$c = 200.7;

// set precision
bcscale(1);

$ab = bcadd($a, $b);
echo bcsub($ab, $c); // result 0.0

?>

Debian Squeeze で PHP 5.3.3-7+squeeze1 を使用してテスト済み

于 2011-06-15T10:53:45.853 に答える