博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 浮点型运算相关问题
阅读量:7015 次
发布时间:2019-06-28

本文共 637 字,大约阅读时间需要 2 分钟。

hot3.png

php 浮点数计算比较及取整不准确。举例:

$a = 0.2+0.7;
$b = 0.9;
var_dump($a == $b); //输出的结果为bool(false)
PHP 官方手册说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二 进制的格式。
 printf("%0.20f", $a); //输出的结果为0.89999999999999991118
 printf("%0.20f", $b); //输出的结果为0.90000000000000002220
根据结果说明,作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
需要说明的是,这不是 PHP 的 问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。

解决方法:需要将其控制在我们需要的精度范围内再行比较。

因此使用 bcadd() 函数 来对浮点数想加并进行精度转换(为字符串):
var_dump(bcadd(0.2,0.7,1) == 0.9); // 输出的结果为bool(true)

也可以使用round() 函数是按照指定的精度进行四舍五入:

var_dump(round(0.2+0.7,2) == 0.9);// 输出的结果为bool(true)

转载于:https://my.oschina.net/u/1177615/blog/180715

你可能感兴趣的文章
Linux磁盘管理
查看>>
用Angular动态添加、删除输入框并计算总值
查看>>
C语言网络通讯的示例
查看>>
Linux中DNS反向解析配置
查看>>
mysql数据库安装与使用(附安装包)
查看>>
Win8系统108个运行命令 你能记住多少?(转)
查看>>
网站主机
查看>>
Connection封装
查看>>
如何判断 Linux 是否运行在虚拟机上
查看>>
MySQL中PreparedStatement sql中in的引号问题
查看>>
趣事:据说只有程序员才能看懂的笑话,祝新的一周愉快!
查看>>
Python3 迭代器与生成器
查看>>
云计算成增收引擎,营收创上市以来新高
查看>>
PHP 常用的header头部定义汇总
查看>>
Java heap space 解决方法
查看>>
通过注册表开通关闭局域网共享
查看>>
Asp.net 导入导出Excel
查看>>
Oracle 10.2.0.4(5)EM不能启动的解决方案
查看>>
AngularJS—— 独立作用域
查看>>
Web开发(初级)- CSS基础
查看>>