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动态创建Flash动画
Oct 09 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
PHP二维数组去重实例分析
Nov 18 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
ajax 的post方法实例(带循环)
2011/07/04 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
两年的个人工作自我评价
2014/01/10 职场文书
跳槽求职信范文
2014/05/26 职场文书
党员自我剖析材料
2014/08/31 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
先进学校事迹材料
2014/12/30 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android