PHPで浮動小数点数を比較する 質問する

PHPで浮動小数点数を比較する 質問する

次のサンプル コードのように、PHP で 2 つの float を比較します。

$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ではなく条件の結果が返されます。PHP で浮動小数点数を処理/比較する特別な方法はありますか?if$a$b

もしそうなら、この問題の解決にご協力ください。

それともサーバーの設定に問題があるのでしょうか?

ベストアンサー1

このようにするとすべき同じである。しかし、浮動小数点値の特性として、思われる同じ値になるものは、実際に同一である必要はありません。したがって、$aがリテラルであり.17$b計算によってそこに到達する場合、両方とも同じ値を表示していても、異なる可能性があります。

通常、このように浮動小数点値の等価性を比較することはないので、許容可能な最小の差を使用する必要があります。

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

そんな感じ。

おすすめ記事