abs()
Aprende a usar la función abs() en PHP para obtener el valor absoluto de un número, con ejemplos, casos extremos y usos prácticos.
La función abs() devuelve el valor absoluto de un número: su magnitud sin signo. En otras palabras, indica a qué distancia está el número de cero, por lo que abs(-5) y abs(5) dan ambos 5. Esta página cubre la sintaxis, los tipos de retorno, los casos extremos importantes y los usos más comunes en la práctica.
Sintaxis
abs(int|float $num): int|float$num— el número del que deseas obtener el valor absoluto (entero o flotante).- Valor de retorno — el valor absoluto de
$num. El tipo de retorno coincide con el tipo de entrada: si se pasa un entero, se obtiene un entero; si se pasa un flotante, se obtiene un flotante.
Ejemplo básico
Esto imprime 5. Empezamos con un valor negativo, llamamos a abs() para eliminar el signo y mostramos el resultado. Una entrada positiva se devuelve sin cambios.
Enteros vs. flotantes
abs() preserva el tipo numérico, lo que importa al comparar resultados o dar formato a la salida:
<?php
echo abs(-7); // 7 (int)
echo "\n";
echo abs(-7.5); // 7.5 (float)
echo "\n";
var_dump(abs(-7)); // int(7)
var_dump(abs(-7.5)); // float(7.5)
?>Las cadenas numéricas también se aceptan: abs("-3.2") devuelve el flotante 3.2. Sin embargo, pasar una cadena no numérica provoca un TypeError en PHP 8+, así que valida la entrada con is_numeric() cuando provenga de fuera de tu código.
Un uso práctico: distancia entre dos valores
La razón más común para usar abs() es medir la diferencia entre dos números sin importar cuál es mayor:
<?php
$expected = 100;
$actual = 87;
$difference = abs($expected - $actual);
echo "You are off by {$difference}.";
?>Esto imprime You are off by 13. tanto si $actual es 87 como 113: el orden de la resta ya no importa. El mismo patrón resulta útil para tolerancias (if (abs($a - $b) < 0.001)), diferencias de precios y distancias entre coordenadas.
Casos extremos y advertencias
- El cero sigue siendo cero.
abs(0)es0yabs(-0.0)es0.0. - ¿Ya es positivo?
abs()lo devuelve intacto, por lo que es seguro llamarlo de forma preventiva sin comprobar el signo primero. - Desbordamiento con
PHP_INT_MIN.abs(PHP_INT_MIN)no cabe en un entero (su contraparte positiva es uno mayor quePHP_INT_MAX), por lo que PHP lo devuelve como flotante para evitar el desbordamiento. - No redondea.
abs()solo elimina el signo. Para descartar la parte decimal usafloor(),ceil()oround().
Funciones relacionadas
round()— redondea un flotante a una precisión determinada.floor()/ceil()— redondea hacia abajo / hacia arriba al entero más cercano.pow()ysqrt()— exponenciación y raíces cuadradas.max()/min()— selecciona el mayor o el menor de varios valores.is_numeric()— comprueba que un valor es un número antes de operar con él.
Para un recorrido más amplio por los helpers numéricos de PHP, consulta la referencia de PHP Math.
Conclusión
abs() es una herramienta pequeña pero de uso frecuente: devuelve la magnitud de un número independientemente del signo, conserva el tipo de la entrada y resulta muy útil cuando necesitas la distancia entre dos valores. Recuerda que no redondea y ten en cuenta el caso extremo de PHP_INT_MIN, donde el resultado se devuelve como flotante.