更好的理解 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   建伟F4nniu  阅读(73)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2019-07-15 KiCad 不可以画线宽小于 0.2mm 的走线?
2018-07-15 如何打开 Windows 的热键提示

导航

点击右上角即可分享
微信分享提示