ホームページ  >  記事  >  バックエンド開発  >  PHP で等しくない浮動小数点 10 進数を正しく処理する方法

PHP で等しくない浮動小数点 10 進数を正しく処理する方法

王林
王林オリジナル
2024-03-08 13:18:03953ブラウズ

PHP で等しくない浮動小数点 10 進数を正しく処理する方法

PHP で浮動小数点数を比較すると、浮動小数点数の格納精度が原因で不等な浮動小数点数が発生することがあります。この状況に正しく対処するには、不平等な結果を避けるためにできることがいくつかあります。

1. 比較関数を使用する

PHP では、比較関数を使用して 2 つの浮動小数点数が等しいかどうかを判断できます。 PHP には、2 つの浮動小数点数が等しいかどうかを比較するために使用できる float_cmp 関数が用意されています。サンプル コードは次のとおりです。

function float_cmp($a, $b, $epsilon = 0.00001) {
    return abs($a - $b) < $epsilon;
}

$a = 0.1 + 0.2;
$b = 0.3;

if (float_cmp($a, $b)) {
    echo "两个浮点数相等";
} else {
    echo "两个浮点数不相等";
}

上の例では、小さな誤差範囲を設定することで float_cmp 関数を定義し、2 つの浮動小数点数が等しいかどうかを比較します。epsilon それらの差が許容範囲内であるかどうかを判断し、それによって浮動小数点数の記憶精度の問題を回避します。

2. 浮動小数点演算の代わりに整数演算を使用する

浮動小数点の不等号を回避するもう 1 つの方法は、浮動小数点演算の代わりに整数演算を使用することです。演算のために浮動小数点数を整数に変換し、最終的に結果を浮動小数点数に戻すことができます。これにより、浮動小数点数の記憶精度によって引き起こされる問題を回避できます。

サンプルコードは以下のとおりです。

$a = 0.1 * 10 + 0.2 * 10;
$b = 0.3 * 10;

if ($a == $b) {
    echo "两个浮点数相等";
} else {
    echo "两个浮点数不相等";
}

上記の例では、浮動小数点数を適切な倍数で乗算し、整数に変換して演算し、比較結果が等しくなります。したがって、浮動小数点数の記憶精度の必要性を回避できます。

概要:

PHP で不等な浮動小数点数を扱う場合、浮動小数点演算の代わりに比較関数または整数演算を使用することで問題を回避できます。同時に、浮動小数点数を比較する場合は、浮動小数点数の格納精度による影響を避けるために、浮動小数点数が等しいかどうかを判断するための妥当な誤差範囲の設定に注意してください。正しい処理方法を習得すると、不等な浮動小数点数の問題を効果的に回避し、プログラムの精度と安定性を向上させることができます。

以上がPHP で等しくない浮動小数点 10 進数を正しく処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。