PHP 8.4.2 Released!

bccomp

(PHP 4, PHP 5, PHP 7, PHP 8)

bccomp2 つの任意精度数値を比較する

説明

bccomp(string $num1, string $num2, ?int $scale = null): int

num1num2 を比較し、 比較結果を整数値で返します。

パラメータ

num1

左オペランドを表す文字列。

num2

右オペランドを表す文字列。

scale
This parameter is used to set the number of digits after the decimal place in the result. If null, it will default to the default scale set with bcscale(), or fallback to the value of the bcmath.scale INI directive.

戻り値

ふたつのオペランドが等しければ 0num1num2 より大きければ戻り値は 1、小さければ -1 を返します。

エラー / 例外

This function throws a ValueError in the following cases:

  • num1 or num2 is not a well-formed BCMath numeric string.
  • scale is outside the valid range.

変更履歴

バージョン 説明
8.0.0 scale は、nullable になりました。

例1 bccomp() の例

<?php

echo bccomp('1', '2') . "\n"; // -1
echo bccomp('1.00001', '1', 3); // 0
echo bccomp('1.00001', '1', 5); // 1

?>
add a note

User Contributed Notes 4 notes

up
25
Robert Lozyniak
14 years ago
Beware that negative zero does not compare equal to positive zero.
up
15
aaugrin at gmail dot com
6 years ago
BEWARE! left and right operand is string!! so number in E-notation like 9.012E-6 need to be converted with sprintf('%F') to string
up
0
mm at mobelt dot com
13 days ago
If you want to compare 2 decimals for equality, bccomp does not works as expected:

bccomp("1.000000000000000","0.999999999999999",2)

returns 1

Instead, use

bcsub("1.000000000000000","0.999999999999999",2) == 0
up
-3
m dot kaczanowski at alianet dot pl
15 years ago
Improvement of functions bcmax() and bcmin() originaly written by frank at booksku dot com

<?php

function bcmax() {
$args = func_get_args();
if (
count($args)==0) return false;
$max = $args[0];
foreach(
$args as $value) {
if (
bccomp($value, $max)==1) {
$max = $value;
}
}
return
$max;
}

function
bcmin() {
$args = func_get_args();
if (
count($args)==0) return false;
$min = $args[0];
foreach(
$args as $value) {
if (
bccomp($min, $value)==1) {
$min = $value;
}
}
return
$min;
}
?>
To Top