Beware that negative zero does not compare equal to positive zero.
(PHP 4, PHP 5, PHP 7, PHP 8)
bccomp — Compare deux nombres de grande taille
Compare l'opérande num1
avec num2
et retourne le
résultat sous forme d'un entier.
num1
L'opérande gauche, sous la forme d'une chaîne de caractères.
num2
L'opérande droite, sous la forme d'une chaîne de caractères.
scale
null
, il prendra par défaut la valeur définie par bcscale(),
ou, à défaut, la valeur de la directive INI
bcmath.scale
.
Retourne 0
si les deux opérandes sont égaux,
1
si num1
est supérieur à
num2
, ou -1
sinon.
Cette fonction lève une exception ValueError dans les cas suivants :
num1
ou num2
n'est pas une chaîne numérique BCMath correctement formée.
scale
est en dehors de la plage valide.
Version | Description |
---|---|
8.0.0 |
scale est désormais nullable.
|
Exemple #1 Exemple avec bccomp()
<?php
echo bccomp('1', '2') . "\n"; // -1
echo bccomp('1.00001', '1', 3); // 0
echo bccomp('1.00001', '1', 5); // 1
?>
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
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
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;
}
?>