内容简介:看下面这段代码,打印结果是:再看下面这段代码,
看下面这段代码, 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 $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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 在 Python 中判断两个浮点数的相等
- 【重温基础】18.相等性判断
- CSS Flexbox 之間距相等
- c# – 比较两个(Integer)列表是否相等
- C#相等判断实例报错分析及解决
- JS面试题之比较两个对象是否相等?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。