更好的理解 php 浮点类型

更好的理解 php 浮点类型

image

例子

先来个简单的例子,这个例子很多人喜欢,而且也最能说明问题。

$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);

禁止转载
原文地址: https://www.cnblogs.com/F4NNIU/p/15013928.html

posted on 2021-07-15 09:27  建伟F4nniu  阅读(72)  评论(0编辑  收藏  举报

导航