一尘不染

比较PHP中的浮点数

php

我想比较PHP中的两个浮点数,如以下示例代码所示:

$a = 0.17;
$b = 1 - 0.83; //0.17
if($a == $b ){
 echo 'a and b are same';
}
else {
 echo 'a and b are not same';
}

在此代码中,即使和相同,它也返回else条件的结果而不是if条件。有没有什么特殊的方法来处理/比较PHP中的浮点数?$a``$b

如果是,那么请帮助我解决此问题。

还是我的服务器配置有问题?


阅读 324

收藏
2020-05-26

共1个答案

一尘不染

如果您这样做,它们 应该 是相同的。但是请注意,浮点值的一个特征是 看起来
可以导致相同值的计算实际上不必相同。因此,如果$a是一个文字.17$b通过计算到达该文字,则尽管它们都显示相同的值,但很可能它们是不同的。

通常,您永远不会像这样比较相等的浮点值,您需要使用可接受的最小差异:

if (abs(($a-$b)/$b) < 0.00001) {
  echo "same";
}

这样的事情。

2020-05-26