服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

php如何比较两个浮点数是否相等详解

2019-06-16 13:45nemo PHP教程

这篇文章主要给大家介绍了关于php如何比较两个浮点数是否相等的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

本文主要给大家介绍了关于利用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删除数组中的重复元素

    实例介绍PHP删除数组中的重复元素

    在本文里小编给大家分享了关于PHP如何删除数组中的重复元素的相关知识点和步骤,需要的朋友们学习下。...

    脚本之家 474 2019-06-06
  • PHP教程7种流行PHP集成开发工具(IDE)的比较

    7种流行PHP集成开发工具(IDE)的比较

    本文发掘集成开发环境(IDE)的所有用途,并比较 7 种流行的 IDE 的成本和优势。 编写关于PHP的系列文章让我更加深刻地了解了 PHP 开发人员的世界。我和许多 PHP 程序员交谈过,最令我惊奇的是只有很少的人使用 IDE。大多数程序员使...

    服务器之家 181 2019-06-03
  • PHP教程PHP中rename()函数的妙用讲解

    PHP中rename()函数的妙用讲解

    今天小编就为大家分享一篇关于PHP中rename()函数的妙用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    炫酷飞扬 395 2019-06-07
  • PHP教程实例介绍PHP中zip_open()函数用法

    实例介绍PHP中zip_open()函数用法

    在本篇内容里小编给大家分享了关于PHP中zip_open()函数用法的相关知识点,有需要的朋友们跟着学习下。...

    laozhang 257 2019-06-14
  • PHP教程PHP封装的数据库模型Model类完整示例【基于PDO】

    PHP封装的数据库模型Model类完整示例【基于PDO】

    这篇文章主要介绍了PHP封装的数据库模型Model类,结合实例形式分析了php基于PDO针对mysql数据库常见增删改查、统计、判断等相关操作封装与使用技巧,需要的朋友可以参考下...

    小菜鸟有大梦想 264 2019-06-01
  • PHP教程PHP获取访问设备信息的方法示例

    PHP获取访问设备信息的方法示例

    本文实例讲述了PHP获取访问设备信息的方法。分享给大家供大家参考,具体如下: ?phpheader(Content:Content-type:text/html;charset=utf-8);// // 作用取得客户端的ip、地理位置、浏览器、以及访问设备 class get_equipment_info{ ////获得访客浏览器类型...

    ztblog 147 2019-06-11
  • PHP教程PHP htmlspecialchars()函数用法与实例讲解

    PHP htmlspecialchars()函数用法与实例讲解

    今天小编就为大家分享一篇关于PHP htmlspecialchars()函数用法与实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册 327 2019-06-03
  • PHP教程常用的php开发工具有哪些?

    常用的php开发工具有哪些?

    由于最近小编要自学php,所以整理了一些常用的 php开发工具 ,给大家分享一下: 常用的php开发工具有哪些? EditPlus EditPlus是一套功能强大,可取代记事本的文字编辑器,拥有无限制的Undo/Redo、英文拼字检查、自动换行、列数标记...

    百度经验 284 2019-06-03