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 APC的安装与使用详解
Jun 13 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
PHP判断是否有Get参数的方法
May 05 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
PHP/HTML混写的四种方式总结
Feb 27 PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
Oct 30 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
网页javascript精华代码集
2007/01/24 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
python SVM 线性分类模型的实现
2019/07/19 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
Python json读写方式和字典相互转化
2020/04/18 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
合作意向书模板
2014/03/31 职场文书
调解协议书
2014/04/16 职场文书
签证工作证明模板
2015/06/15 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang