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 相关文章推荐
一个目录遍历函数
Oct 09 PHP
自动生成文章摘要的代码[PHP 版本]
Mar 20 PHP
php出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
php实现的常见排序算法汇总
Sep 08 PHP
谈谈 PHP7新增功能
Dec 16 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
php表单处理操作
Nov 16 PHP
Mac系统下安装PHP Xdebug
Mar 30 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
详解PHP中的Traits
2015/07/29 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
Python使用asyncio包处理并发详解
2017/09/09 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
详解python算法之冒泡排序
2019/03/05 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
互动出版网:专业书籍
2017/03/21 全球购物
医院工作检讨书范文
2014/02/10 职场文书
后备干部考察材料
2014/02/12 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis
Python中的socket网络模块介绍
2022/07/23 Python