ste*_*eve 2 php floating-point precision
可能重复:
PHP浮点计算的准确性
当我在eclipse中执行下面的代码时,结果不是0而是5.5511151231258E-17
$a = 0.1+0.2-0.3;
echo $a;
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么?
这是因为浮点数的精度有限.
您可以在PHP手册中找到有关此特征的更多信息.
浮点数的精度有限.虽然它取决于系统,但PHP通常使用IEEE 754双精度格式,由于舍入的顺序为1.11e-16,因此会产生最大的相对误差.非基本算术运算可能会产生更大的误差,当然,当复合多个运算时,必须考虑错误编程.
另外,可以精确表示为基数10中的浮点数的有理数,如0.1或0.7,不具有精确表示为基数2中的浮点数,其在内部使用,无论尾数的大小.因此,它们不能在没有很小精度损失的情况下转换为它们的内部二进制对应物.这可能会导致令人困惑的结果:例如,floor((0.1 + 0.7)*10)通常会返回7而不是预期的8,因为内部表示将类似于7.9999999999999991118 ....
因此,永远不要将浮点数结果信任到最后一位,并且永远不要将浮点数与相等性进行比较.如果需要更高的精度,可以使用任意精度数学函数和gmp函数.
请注意,这不是PHP特有的特性; 它只是浮点数的工作方式.