比较 php 中的浮点数

2022-08-30 06:30:57

我想比较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';
}

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

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

或者我的服务器配置有问题吗?


答案 1

如果你这样做,它们应该是一样的。但请注意,浮点值的一个特征是,似乎产生相同值的计算实际上并不一定相同。因此,如果 是文字并通过计算到达那里,则很可能是它们不同,尽管两者都显示相同的值。$a.17$b

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

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

类似的东西。


答案 2

请先阅读手册中的红色警告。切勿比较浮点数的相等性。您应该使用 epsilon 技术。

例如:

if (abs($a-$b) < PHP_FLOAT_EPSILON) { … }

其中 是 常量 表示非常小的数字(您必须在 7.2 之前的旧版本的 PHP 中定义它)PHP_FLOAT_EPSILON


推荐