PHP-浮点数精度
$a = ‘35’;
$b = ‘-34.99’;
echo ($a + $b);
结果为0.009999999999998
这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。
为什么PHP不返回预期的0.01?
回答:
因为浮点运算!=实数运算。对于一些浮子a
和b
,由不精确性引起的差异的说明是(a+b)-b != a
。这适用于使用浮点数的任何语言。
由于浮点数是具有有限精度的二进制数,因此存在有限数量的可表示数,这会导致精度问题]和类似的意外情况。这是另一篇有趣的读物:每位计算机科学家都应了解的浮点运算法则]。
回到您的问题,基本上没有办法用二进制准确地表示34.99或0.01(就像十进制一样,1/3 = 0.3333
…),因此使用了近似值。要解决此问题,您可以:
使用
round($result, 2)
的结果是四舍五入到小数点后2位。使用整数。如果那是货币,以美元为单位,则将35.00美元存储为3500,将34.99美元存储为3499,然后将结果除以100。
遗憾的是,PHP没有其他语言那样具有十进制数据类型。
以上是 PHP-浮点数精度 的全部内容, 来源链接: utcz.com/qa/400696.html