更好的理解 php 浮点类型
PHP 类型 理解 更好 浮点
2023-09-14 09:10:28 时间
更好的理解 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);
相关文章
- PHP使用MySQL实现消息队列
- PHP 枚举类型的管理与设计
- 最全最详细的PHP面试题(带有答案)
- PHP封装成应用程序的三个方案
- php与mysql通讯那点事
- php常用代码(一)
- 新一代 PHP 加速插件 Zend Opcache
- 整理了一份比较全面的PHP开发编码规范.
- PHP 自动载入
- [转]php 解决json_encode中文UNICODE转码问题
- [转]PHP SOCKET编程
- atitit.木马病毒webshell的原理and设计 java c# .net php.
- PHP 类型比较
- php.ini的载入位置
- nginx和php-fpm调用方式
- 安装PHP sphinx扩展 sphinx-1.1.0/sphinx.c:105:2: error: too few arguments 错误