ホームページ >バックエンド開発 >PHPチュートリアル >PHP での浮動小数点比較が時々失敗するのはなぜですか?また、それらを修正するにはどうすればよいですか?
PHP での float の比較
PHP で 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'; }
驚くべきことに、このコードは、$a と $b が等しいはずであるにもかかわらず、「a と b は同じではありません」を返します。
不一致の理由
この不一致は浮動小数点の性質から生じます算数。浮動小数点値は、真の数値のみを近似できるバイナリ形式で数値を表します。その結果、浮動小数点数の演算で小さなエラーが発生し、正確な比較が不可能になる可能性があります。
正しいアプローチ
この問題を回避するには、次の場合に許容値を使用します。フロートの比較。この許容差は、等しいとみなされる 2 つの値間の最大許容差を表します。例:
if (abs(($a - $b) / $b) < 0.00001) { echo 'a and b are same'; } else { echo 'a and b are not same'; }
この場合、$a と $b の絶対差を $b で割った値が 0.00001 未満の場合、値は等しいとみなされます。アプリケーションに必要な精度に基づいて許容値を調整します。
以上がPHP での浮動小数点比較が時々失敗するのはなぜですか?また、それらを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。