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 相关文章推荐
我的论坛源代码(三)
Oct 09 PHP
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
php三维数组去重(示例代码)
Nov 26 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
php将金额数字转化为中文大写
Jul 09 PHP
PHP单链表的实现代码
Jul 05 PHP
实例讲解PHP表单处理
Feb 15 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 PHP
laravel 解决强制跳转 https的问题
Oct 22 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 URL验证正则表达式
2011/07/19 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
详解angular element()方法使用
2017/04/08 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python笔记之观察者模式
2019/11/20 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
幼儿园教育教学反思
2014/01/31 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
八年级英语教学反思
2016/02/15 职场文书
自荐信范文
2019/05/20 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书