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 相关文章推荐
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
Mar 05 PHP
php变量作用域的深入解析
Jun 03 PHP
php对图像的各种处理函数代码小结
Jul 08 PHP
Laravel 5框架学习之表单
Apr 08 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
php 获取xml接口数据的处理方法
May 31 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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 switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
javascript String 对象
2008/04/25 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
python函数局部变量用法实例分析
2015/08/04 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
flask实现验证码并验证功能
2019/12/05 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
python中selenium库的基本使用详解
2020/07/31 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
事业单位绩效考核实施方案
2014/03/27 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
监察建议书
2015/02/04 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android