<?php
echo 199.8 + 0.9 -200.7; //expect 0, result 2.8421709430404E-14 ?
?>
PHPバージョン5.3.2-1ubuntu4.7でテスト済み
スペースが制限された分数浮動小数点は、一部の値では不正確1/3
です(10進表記では、有限空間に書き出すことができないのと同じように)。
2.8421709430404E-14
0に非常に近いです。
四捨五入するか、有効数字の数に出力します。
正確な計算が必要な場合 (つまり、金銭取引の場合)、BCD (2 進化 10 進数) または任意精度の計算を使用する必要があります。PHP はBC Mathを使用してこれをサポートしています。
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 を使用してテスト済み