PHP – 浮点数精度
作者:互联网
参见英文答案 > Is floating point math broken? 31个
$a = '35';
$b = '-34.99';
echo ($a + $b);
结果在0.009999999999998
怎么了?我想知道为什么我的程序不断报告奇怪的结果.
为什么PHP没有返回预期的0.01?
解决方法:
因为浮点运算!=实数运算.由于不精确导致的差异的说明是,对于一些浮子a和b,(a b)-b!= a.这适用于使用浮点数的任何语言.
由于floating point是具有有限精度的二进制数,因此有一定数量的representable numbers,这导致accuracy problems和这样的惊喜.这是另一个有趣的读物:What Every Computer Scientist Should Know About Floating-Point Arithmetic.
回到你的问题,基本上没有办法准确地表示二进制34.99或0.01(就像十进制,1/3 = 0.3333 ……),所以使用近似值.要解决此问题,您可以:
>在结果上使用round($result, 2)
将其四舍五入到小数点后两位.
>使用整数.如果是货币,比如说美元,则将35.00美元存储为3500,将34.99美元存储为3499,然后将结果除以100.
遗憾的是PHP没有像other languages那样的十进制数据类型.
标签:php,floating-point,precision,floating-accuracy 来源: https://codeday.me/bug/20190911/1803721.html