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 删除无限级目录与文件代码共享
Nov 22 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
php分页函数示例代码分享
Feb 24 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
PHP 返回13位时间戳的实现代码
May 13 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP数组访问常用方法解析
Sep 05 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
用js编写留言板
2020/03/17 Javascript
vue实现购物车案例
2020/05/30 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
pyside写ui界面入门示例
2014/01/22 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
Python切图九宫格的实现方法
2019/10/10 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
房产销售经理职责
2013/12/20 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
珠宝店促销方案
2014/03/21 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
大学生简短的自我评价
2014/09/12 职场文书
应届生简历自我评价
2015/03/11 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
2016年社区文体活动总结
2016/04/06 职场文书