更好的理解 php 浮点类型
更好的理解 php 浮点类型
例子
先来个简单的例子,这个例子很多人喜欢,而且也最能说明问题。
$a = 0.58 *100;
var(intval($a));
输出结果是 57,相信很多人也看过这类的说明,也有很多文章说不要相信浮点运算,任何语言都是。
接着我们来看看到底是怎么回事,其实在 0.58 * 100
时计算机内部二进制存储时是有误差的,只不过显示不出来而已。
实验
那我们再做个实验。
$a = 57.9999999999999;
echo $a;
上面显示的是 58,所以对于浮点类型的值,眼见不一定为实。
precision
经过群里小伙伴的提醒,PHP 设置中有一个 precision 配置,用于显示浮点有效位数的。
当设置为 -1 时就可以显示出原始数据,那时候就眼见为实了。
但是如果使用 -1 的配置,在使用 BCMath 库的相关函数时会过于精度无法正确判断,比如,当 precision 为 -1 时,bccomp(0.58*100, 58, 2) 返回是 -1,当 precision 为默认 14 时 返回为 0。
思考
以下结果是什么?
$a = 57.999999999999999;
var_dump($a === (double)58);
所有文章为原创,如非授权,请勿转载。
我们要多多支持有创造能力的人,因为那是我们所有人的希望。
同时我们也希望成为有创造能力的人,我们支持开源,同时也支持正版。
🎈数码荔技正版软件商店🎈
【正版】微软 Office 365
【正版】老牌文件对比工具 Beyond Compare
【正版】JetBrains Idea Java IDE
不断学习,慢慢进步,做时间的朋友。
注意力 > 时间 > 金钱。 -- 建伟 F4nniu
我们要多多支持有创造能力的人,因为那是我们所有人的希望。
同时我们也希望成为有创造能力的人,我们支持开源,同时也支持正版。
🎈数码荔技正版软件商店🎈
【正版】微软 Office 365
【正版】老牌文件对比工具 Beyond Compare
【正版】JetBrains Idea Java IDE
不断学习,慢慢进步,做时间的朋友。
注意力 > 时间 > 金钱。 -- 建伟 F4nniu