0

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

在 PHP 版本 5.3.2-1 ubuntu4.7 上测试

4

3 回答 3

7

有限空间的小数浮点对于某些值是不准确1/3的(就像在十进制表示法中,您不能在有限空间中写出一样)。

2.8421709430404E-14非常接近于 0。

将其四舍五入,或输出到一定数量的有效数字。

于 2011-06-15T10:26:05.363 回答
2

如果您想要精确计算(即货币交易),您应该使用 BCD(二进制编码的小数)或任意精度数学。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 回答