PHP中浮点数计算比较及取整不精准的解决方法_.docx

上传人:啊飒飒 文档编号:11619418 上传时间:2021-08-26 格式:DOCX 页数:4 大小:12.26KB
返回 下载 相关 举报
PHP中浮点数计算比较及取整不精准的解决方法_.docx_第1页
第1页 / 共4页
PHP中浮点数计算比较及取整不精准的解决方法_.docx_第2页
第2页 / 共4页
PHP中浮点数计算比较及取整不精准的解决方法_.docx_第3页
第3页 / 共4页
PHP中浮点数计算比较及取整不精准的解决方法_.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《PHP中浮点数计算比较及取整不精准的解决方法_.docx》由会员分享,可在线阅读,更多相关《PHP中浮点数计算比较及取整不精准的解决方法_.docx(4页珍藏版)》请在三一文库上搜索。

1、PHP中浮点数计算比较及取整不精准的解决方法_ 浮点数计算结果比较 一则浮点数计算例子如下: 代码如下: $a = 0.2+0.7; $b = 0.9; var_dump($a = $b); 打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这明显是有违我们的常识的。 对此问题,PHP官方手册曾又说明:明显简洁的十进制分数如 0.2 不能在不丢失一点点精度的状况下转换为内部二进制的格式。这和一个事实有关,那就是不行能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333.。 我们将上面的变量用双精度格式打印出

2、来: 代码如下: $a = 0.2+0.7; $b = 0.9; printf(%0.20f, $a); echo br /; printf(%0.20f, $b); 输出结果如下: 代码如下: 0.89999999999999991118 0.90000000000000002220 明显在这里,事实上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永久不要信任浮点数结果精确到了最终一位,也永久不要比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。 所以要比较两个浮点数,需要将其掌握在我们需要的

3、精度范围内再行比较,因此用法 bcadd() 函数来对浮点数想加并进行精度转换(为字符串): 代码如下: var_dump(bcadd(0.2,0.7,1) = 0.9); / 输出:bool(true) 浮点数取整 在PHP 取整函数 ceil 与 floor一文中,曾有例子: 代码如下: ?php echo ceil(2.1/0.7); / 输出:4 ? 经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的: 代码如下: ?php printf(%0.20f, (2.1/0.7); / 输出:3.00000000000000044409 ? 经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的,因此用法 round() 函数处理一下即可: 代码如下: ?php echo ceil( round(2.1/0.7),1) ); ? 虽然 round() 函数是根据指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。 更多信息请查看IT技术专栏 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1