<?php echo 199.8 + 0.9 -200.7; //expect 0, result 2.8421709430404E-14 ? ?>
Протестировано на PHP версии 5.3.2-1 ubuntu4.7
Дробная с плавающей запятой ограниченная область является неточной для некоторых значений (точно так же, как в десятичной записи вы не можете записать 1/3 в конечном пространстве).
1/3
2.8421709430404E-14 очень близко к 0.
2.8421709430404E-14
Округлите его или выведите до определенного числа значащих цифр.
Если вам нужны точные вычисления (т. Е. Для денежных транзакций), вам следует использовать BCD (двоично-десятичные десятичные дроби) или математические вычисления произвольной точности. 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 ?>
Протестировано с PHP 5.3.3-7 + squeeze1 на Debian Squeeze