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自动更新新闻DIY
Oct 09 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
php异常处理使用示例
Feb 25 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
Windows7下的php环境配置教程
Feb 28 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
Laravel多域名下字段验证的方法
Apr 04 PHP
Yii 使用intervention/image拓展实现图像处理功能
Jun 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+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP强制转化的形式整理
2020/05/22 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
微信小程序实现滑动删除效果
2017/05/19 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python多进程操作实例
2014/11/21 Python
python简单实现操作Mysql数据库
2018/01/29 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
python实现双人五子棋(终端版)
2020/12/30 Python
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
TCP/IP的分层模型
2013/10/27 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
客房主管岗位职责
2013/12/09 职场文书
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
会计应聘求职信范文
2013/12/17 职场文书
化学教师自荐信范文
2013/12/28 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
个人作风建设总结
2014/10/23 职场文书
小学语文教师研修日志
2015/11/13 职场文书
redis 查看所有的key方式
2021/05/07 Redis