Beware that negative zero does not compare equal to positive zero.(PHP 4, PHP 5, PHP 7, PHP 8)
bccomp — Comparar dos números de gran tamaño
Compara el operando num1
con num2 y devuelve el
resultado en forma de un entero.
num1El operador izquierdo, como una cadena.
num2El operador derecho, como una cadena
scalenull, se establecerá por defecto en la escala predeterminada establecida con bcscale(),
o se utilizará el valor de la directiva INI
bcmath.scale.
Devuelve 0 si los dos operandos son iguales,
1 si num1 es superior a
num2, o -1 en caso contrario.
Esta función lanza una excepción ValueError en los siguientes casos:
num1 o num2
no es una cadena numérica bien formada de BCMath.
scale está fuera del rango válido.
| Versión | Descripción |
|---|---|
| 8.0.0 |
scale ahora es nullable.
|
Ejemplo #1 Ejemplo con 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<?phpfunction 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 1Instead, usebcsub("1.000000000000000","0.999999999999999",2) == 0