php如何比较两个浮点数是否相等详解


Posted in PHP onFebruary 12, 2019

前言

本文主要给大家介绍了关于利用php如何比较浮点数是否相等的相关内容,下面话不多说了,来一起看看详细的介绍吧

看下面这段代码, 0.9+0.1 的相加结果与 1 进行比较

<?php
$a = 0.9;
$b = 0.1;
$total = $a + $b;
var_dump($total);
if (1 == $total) {
 echo "true";
} else {
 echo "false";
}
echo "\n";

if (1.0 == $total) {
 echo "true";
} else {
 echo "false";
}
?>

打印结果是:

float(1)
true
true

再看下面这段代码, 0.6+0.1+0.1+0.1+0.1 的相加结果与 1 进行比较

<?php
$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;

$total = $a + $b + $c + $d + $e;
var_dump($total);

if (1 == $total) {
 echo "true";
} else {
 echo "false";
}
echo "\n";

if (1.0 == $total) {
 echo "true";
} else {
 echo "false";
}

?>

打印结果是:

float(1)
false
false

为什么这两段代码结果不一样?把两段代码里面的 $total 分别以精度20位的形式打印出来 printf("%.20f\n", $total); ,结果如下:

1.00000000000000000000
0.99999999999999988898

出现这个问题是因为浮点数计算涉及精度。

关于php里面的浮点数, 官方手册 上有相关解释

看官方手册里面关于浮点数的提示,如下图所示。里面提到 永远不要比较两个浮点数是否相等

那么有什么办法可以比较两个浮点数是否相等呢?

方法一、

看如下代码示例

<?php

$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;
$epsilon = 0.00001;

$total = $a + $b + $c + $d + $e;

if(abs($total-1) < $epsilon) {
 echo "true";
} else {
 echo "false";
}
echo "\n";

if(abs($total-1.0) < $epsilon) {
 echo "true";
} else {
 echo "false";
}

?>

结果输出为:

true
true

方法二、

<?php

$a = 0.6;
$b = 0.1;
$c = 0.1;
$d = 0.1;
$e = 0.1;

$total = $a + $b + $c + $d + $e;

if(1.0 == round($total, 5)) {
 echo "true";
} else {
 echo "false";
}
?>

结果输出为:

true

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP form 表单传参明细研究
Jul 17 PHP
php简单提示框alert封装函数
Aug 08 PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
PHP 类相关函数的使用详解
May 10 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
使用PHP json_decode可能遇到的坑与解决方法
Aug 03 PHP
PHP实现网站访问量计数器
Oct 27 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 PHP
PHP+Ajax实现的检测用户名功能简单示例
Feb 12 #PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 #PHP
PHP chunk_split()函数讲解
Feb 12 #PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 #PHP
PHP chr()函数讲解
Feb 11 #PHP
PHP chop()函数讲解
Feb 11 #PHP
PHP bin2hex()函数基础实例讲解
Feb 11 #PHP
You might like
解析PHP实现下载文件的两种方法
2013/07/05 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
python实现折半查找和归并排序算法
2017/04/14 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
物业保安主管岗位职责
2013/12/25 职场文书
娱乐节目策划方案
2014/06/10 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
在redisCluster中模糊获取key方式
2021/07/09 Redis