Beware that negative zero does not compare equal to positive zero.(PHP 4, PHP 5, PHP 7, PHP 8)
bccomp — Vergleich zweier Zahlen beliebiger Genauigkeit
Vergleicht num1 mit num2
und gibt das Ergebnis als Integer-Wert zurück.
num1Der linke Operand als Zeichenkette.
num2Der rechte Operand als Zeichenkette.
scale
Dieser Parameter wird verwendet, um die Anzahl der Nachkommastellen im
Ergebnis festzulegen.
Falls null, wird die mit bcscale() definierte
Standard-Genauigkeit verwendet oder auf den Wert der INI-Direktive
bcmath.scale
zurückgegriffen.
Gibt 0 zurück, wenn beide Operatoren gleich sind,
1, wenn num1 größer ist als
num2, und andernfalls -1.
Diese Funktion löst in den folgenden Fällen einen ValueError aus:
num1 oder num2
ist keine wohlgeformte numerische BCMath-Zeichenkette.
scale liegt außerhalb des gültigen Bereichs.
| Version | Beschreibung |
|---|---|
| 8.0.0 |
scale ist jetzt nullbar.
|
Beispiel #1 bccomp()-Beispiel
<?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