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中的字符串函数
Oct 09 PHP
php include,include_once,require,require_once
Sep 05 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
php中怎么搜索相关联数组键值及获取之
Oct 17 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
PHP fopen函数用法实例讲解
Feb 15 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
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
对于Python的框架中一些会话程序的管理
2015/04/20 Python
详解Python验证码识别
2016/01/25 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
Python 必须了解的5种高级特征
2020/09/10 Python
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
Java如何格式化日期
2012/08/07 面试题
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
工商管理本科毕业生求职信范文
2013/10/05 职场文书
自我鉴定怎么写
2013/12/05 职场文书
学习决心书
2014/03/11 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
社区娱乐活动方案
2014/08/21 职场文书
法律讲堂观后感
2015/06/11 职场文书
学校财务管理制度
2015/08/04 职场文书
600字作文之感受大自然
2019/11/27 职场文书