编程语言
首页 > 编程语言> > PHP – 浮点数精度

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