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'; }
このコードでは、$a と $b は同じ数値 (0.17) を表しますが、== を使用した比較では次の結果が返されます。その他の結果条件。
解決策
厳密な比較 (==) を使用した浮動小数点の等しいかどうかの比較は、浮動小数点の不精度のため信頼性がありません。この問題に対処するには、比較に許容可能な差のしきい値を使用することを検討してください。例:
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; }
このコードでは、関数 abs() は $a と $b の差の絶対値を取得し、その結果を $b で除算します。比較は、浮動小数点の不正確さを考慮して小さなしきい値に対して行われます。
警告
このアプローチは浮動小数点の等価比較に合理的な解決策を提供しますが、浮動小数点値は本質的に不正確であり、正確な等価性が常に正確に表現されるとは限らないことを覚えておくことが重要です。
以上がPHP では浮動小数点数の直接比較が機能しないのはなぜですか?また、それらを確実に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。