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
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
比较详细PHP生成静态页面教程
Jan 10 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
php中动态修改ini配置
Oct 14 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
PHP fclose函数用法总结
Feb 15 PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 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 strcmp使用说明
2010/04/22 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
python使用mailbox打印电子邮件的方法
2015/04/30 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
电子商务专业应届生求职信
2014/05/28 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
2015年推普周活动方案
2015/05/06 职场文书
python 安全地删除列表元素的方法
2022/03/16 Python