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设计模式小结
Feb 15 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
PHP实现HTML页面静态化的方法
Nov 04 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
php查询及多条件查询
Feb 26 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
通过php动态传数据到highcharts
Apr 05 PHP
PHP PDOStatement::execute讲解
Jan 31 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写的AES加密解密类分享
2014/06/20 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
移动前端图片压缩上传的实例
2017/12/06 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
python实现泊松图像融合
2018/07/26 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
经贸日语毕业生自荐信
2013/11/03 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
超市开学活动方案
2014/03/01 职场文书
教师节活动主持词
2014/04/02 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
2014年工程师工作总结
2014/11/25 职场文书
储备店长岗位职责
2015/04/14 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS