PHPでは、任意の精度数値比較演算子を扱う場合( == 、 > 、 <など)、特に数字がPHPのネイティブフローティングポイントの精度を超える場合、ニーズを満たすことができません。この時点で、 BCCOMP関数が最良の選択になります。この記事では、 BCCOMP関数の使用を詳細に紹介し、任意の精度数値比較を実装するための操作手順を共有します。
BCCOMPは、PHPのBC Math Extension Libraryの関数であり、任意の精度の2つの数値文字列を比較するために特に使用されます。 3つの可能な値を返します。
0:2つの数値は等しい
1:最初の番号は2番目の数字より大きい
-1:最初の番号は2番目の数字より小さい
BCCOMPの関数プロトタイプは次のとおりです。
int bccomp ( string $left_operand , string $right_operand [, int $scale = 0 ] )
$ left_operandと$ right_operandは、比較する2つの数値文字列です
$スケールは、小数点後の比較精度です(デフォルト0、整数比較を示します)
PHPの浮動小数点数には有限精度があるため、特定の長さを超える数値の比較はエラーを引き起こします。 BCCOMPは、文字列操作を通じて数値の高精度の比較を実現し、任意の長さの小数をサポートし、財務、科学的コンピューティング、その他のシナリオに適しています。
比較されている2つの数値が文字列形式であり、数字形式に準拠し、小数点を含めることができることを確認してください。
$num1 = "12345678901234567890.12345";
$num2 = "12345678901234567890.12346";
比較精度$スケールを指定します。たとえば、5つの小数点を比較する必要がある場合は、5に設定します。
$result = bccomp($num1, $num2, 5);
if ($result === 0) {
echo "2つの数値は等しい";
} elseif ($result === 1) {
echo "$num1 より大きい $num2";
} else {
echo "$num1 未満 $num2";
}
<?php
// 精度数の比較の例
$num1 = "9876543210.123456789";
$num2 = "9876543210.123456780";
// 小数点を比較した後8少し
$scale = 8;
$result = bccomp($num1, $num2, $scale);
if ($result === 0) {
echo "2つの数値は等しい";
} elseif ($result === 1) {
echo "$num1 より大きい $num2";
} else {
echo "$num1 未満 $num2";
}
?>
BCCOMPに渡された数は法的な数値文字列でなければなりません。そうしないと、エラーが報告されるか、誤った結果が返されます。
$スケールパラメーターは、小数点の比較の精度を決定し、要件に従って合理的に設定する必要があります。
BC Math ExtensionはデフォルトでPHPで有効になっていますが、関数にエラーが見つからない場合は、PHP.iniでBCMATH拡張機能が有効になっていることを確認する必要があります。
上記のコンテンツを使用すると、 BCCOMP関数を簡単に使用して、任意の精度の数値比較を実現して、浮動ポイントの精度によって引き起こされるエラー問題を回避できます。
<?php
// 使用bccomp関数は、2つの高精度番号を比較します,サンプルコードのデモンストレーション
$num1 = "12345.67890123456789";
$num2 = "12345.67890123456780";
$scale = 14;
$result = bccomp($num1, $num2, $scale);
if ($result === 0) {
echo "2つの数値は等しい";
} elseif ($result === 1) {
echo "$num1 より大きい $num2";
} else {
echo "$num1 未満 $num2";
}
?>