Beware that negative zero does not compare equal to positive zero.bccomp
(PHP 4, PHP 5, PHP 7, PHP 8)
bccomp — Compare two arbitrary precision numbers
Description
Compares num1 to num2
and returns the result of the comparison as an integer.
Parameters
num1-
The left operand, as a string.
num2-
The right operand, as a string.
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 thebcmath.scaleINI directive.
Return Values
Returns 0 if both operands are equal,
1 if num1 is greater than
num2, -1 otherwise.
Errors/Exceptions
This function throws a ValueError in the following cases:
-
num1ornum2is not a well-formed BCMath numeric string. -
scaleis outside the valid range.
Changelog
| Version | Description |
|---|---|
| 8.0.0 |
scale is now nullable.
|
Examples
Example #1 bccomp() example
<?php
echo bccomp('1', '2') . "\n"; // -1
echo bccomp('1.00001', '1', 3); // 0
echo bccomp('1.00001', '1', 5); // 1
?>See Also
- BcMath\Number::compare() - Compares two arbitrary precision numbers
+add a note
User Contributed Notes 4 notes
aaugrin at gmail dot com ¶
8 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
m dot kaczanowski at alianet dot pl ¶
17 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;
}
?>
mm at mobelt dot com ¶
1 year 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