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.
num1L'opérande gauche, sous la forme d'une chaîne de caractères.
num2L'opérande droite, sous la forme d'une chaîne de caractères.
scalenull, il prendra la valeur par défaut de l'échelle définie avec bcscale(),
ou utilisera la valeur de la directive INI
bcmath.scale si disponible.
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 stringImprovement 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;
}
?>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