is_finite()
Aprende a usar la función is_finite() en PHP para determinar si un valor es un número finito, no infinito ni NAN.
La función is_finite() en PHP te indica si un número es finito — es decir, un número normal que no es ni infinito (INF / -INF) ni NAN (Not a Number). Esta página explica qué se considera finito, cómo maneja la función los valores no numéricos y cuándo usarla en código real.
Sintaxis
is_finite(float $num): bool$num— el valor a evaluar. Se trata como unfloat; las cadenas numéricas y los enteros se convierten automáticamente.- Valor de retorno —
truesi$numes un número finito,falsesi esINF,-INFoNAN.
Por qué importa "finito"
La aritmética de punto flotante puede producir valores especiales que no son números ordinarios:
INFy-INFaparecen cuando un resultado desborda el rango de unfloat(por ejemplo al dividir por cero con flotantes, o conPHP_FLOAT_MAX * 2).NANaparece en operaciones indefinidas comosqrt(-1)oINF - INF.
Estos valores se propagan silenciosamente en cálculos posteriores y rompen las comparaciones (NAN == NAN devuelve incluso false). is_finite() te permite detectarlos antes de que corrompan tu salida.
Ejemplo básico
Esto asigna un número ordinario a una variable e imprime The number is a finite number, porque 10 es finito.
Comportamiento con distintos valores
El siguiente ejemplo muestra lo que devuelve is_finite() para los casos límite más comunes:
<?php
var_dump(is_finite(10)); // bool(true) — a normal integer
var_dump(is_finite(3.14)); // bool(true) — a normal float
var_dump(is_finite("42")); // bool(true) — numeric string is cast to float
var_dump(is_finite(PHP_FLOAT_MAX)); // bool(true) — large but still finite
var_dump(is_finite(INF)); // bool(false) — positive infinity
var_dump(is_finite(-INF)); // bool(false) — negative infinity
var_dump(is_finite(PHP_FLOAT_MAX * 2));// bool(false) — overflows to INF
var_dump(is_finite(NAN)); // bool(false) — Not a Number
?>Ten en cuenta que is_finite() no valida que un valor sea numérico — primero lo convierte. is_finite("hello") equivale a is_finite(0.0) y devuelve true. Si necesitas confirmar que un valor es realmente un número, valídalo antes con is_numeric().
Un caso de uso práctico
Un patrón habitual es proteger un cálculo que podría desbordarse a INF:
<?php
function safeSquare($x) {
$result = $x * $x;
// If the multiplication overflows, $result becomes INF.
return is_finite($result) ? $result : null;
}
var_dump(safeSquare(3.0)); // float(9)
var_dump(safeSquare(PHP_FLOAT_MAX)); // NULL — squaring overflows to INF
?>Aquí safeSquare() devuelve null en lugar de dejar que INF se propague al resto del programa, para que el llamador pueda gestionar el error limpiamente. (Ten en cuenta que en PHP 8+, la división entera/flotante por cero lanza DivisionByZeroError en lugar de producir INF, por lo que el desbordamiento es la forma típica de obtener un resultado infinito.)
Funciones relacionadas
is_infinite()— la comprobación opuesta: devuelvetrueparaINF/-INF.is_nan()— comprueba específicamente si el valor esNAN.is_numeric()— verifica si un valor es un número o una cadena numérica antes de realizar operaciones matemáticas.is_float()— comprueba si el tipo de una variable esfloat.
Conclusión
is_finite() es una pequeña pero importante salvaguarda cuando trabajas con matemáticas de punto flotante en PHP. Devuelve true solo para números ordinarios y false para INF, -INF y NAN, permitiéndote detectar desbordamientos y resultados indefinidos antes de que se propaguen. Combínala con is_numeric() para validar entradas y con is_infinite() / is_nan() cuando necesites saber exactamente qué valor especial has obtenido.