is_float()
La función is_float() de PHP comprueba si una variable es de tipo float. Aprende su sintaxis, casos habituales y diferencias con funciones similares.
Introducción
is_float() es una función integrada de PHP que comprueba si una variable almacena un valor de punto flotante (un número con parte decimal, como 3.14). Devuelve un booleano, por lo que es la forma estándar de confirmar que un valor es un float antes de ejecutar lógica exclusiva para floats.
Un aspecto clave que conviene entender desde el principio: is_float() evalúa el tipo de la variable, no su valor matemático. El entero 5 y el float 5.0 son iguales en valor, pero solo 5.0 es un float. "3.14" (una cadena de dígitos) tampoco es un float, aunque lo parezca.
Esta página cubre la sintaxis, los casos habituales y sorpresas, las diferencias entre is_float() y funciones relacionadas, y cuándo conviene usarla.
Sintaxis
is_float(mixed $value): bool| Parte | Significado |
|---|---|
$value | La variable a evaluar. Se acepta cualquier tipo. |
| Valor de retorno | true si $value es de tipo float, de lo contrario false. |
is_double() es un alias de is_float() — se comportan de forma idéntica, así que usa el nombre que te resulte más legible.
Ejemplo básico
Cuando usas echo con un booleano, PHP imprime 1 para true y una cadena vacía para false, razón por la que la segunda línea aparece en blanco. Para ver una etiqueta clara, usa var_dump() en su lugar:
<?php
var_dump(is_float(3.14)); // bool(true)
var_dump(is_float(42)); // bool(false)
?>Qué cuenta como float (y qué no)
El mayor error habitual es pensar que una cadena numérica es un float. is_float() solo devuelve true para valores que están almacenados realmente con el tipo float.
<?php
var_dump(is_float(3.14)); // bool(true) — float literal
var_dump(is_float(1.5e3)); // bool(true) — scientific notation = 1500.0
var_dump(is_float(0.0)); // bool(true) — zero is still a float
var_dump(is_float(10)); // bool(false) — integer, not float
var_dump(is_float("3.14")); // bool(false) — string, even though it looks like one
var_dump(is_float(3.14 + 1)); // bool(true) — float arithmetic yields a float
var_dump(is_float(10 / 3)); // bool(true) — division produces a float
?>Ten en cuenta que 10 / 3 es un float aunque ambos operandos sean enteros: la división en PHP devuelve un float cuando el resultado no es un número entero.
Manejo de cadenas numéricas
Si tu valor podría ser una cadena numérica (por ejemplo, proveniente de $_GET, $_POST o un archivo CSV), is_float() devolverá false. Usa is_numeric() para detectar cadenas numéricas, o realiza una conversión de tipo primero:
<?php
$input = "9.99"; // e.g. a price submitted from a form
var_dump(is_float($input)); // bool(false) — it's a string
var_dump(is_numeric($input)); // bool(true) — looks like a number
var_dump(is_float((float) $input)); // bool(true) — cast it first
?>Para una cobertura completa sobre la detección de entradas numéricas, consulta is_numeric() y Tipos de datos en PHP.
Una verificación práctica
Un uso habitual es validar un valor antes de realizar operaciones matemáticas que solo tienen sentido con un float:
<?php
function applyDiscount(mixed $price, float $rate): float
{
if (!is_float($price)) {
// normalize numeric strings/ints into a float
$price = (float) $price;
}
return $price - ($price * $rate);
}
echo applyDiscount(49.99, 0.10) . "\n"; // 44.991
echo applyDiscount("20", 0.25) . "\n"; // 15
?>Funciones relacionadas para verificación de tipos
| Función | Devuelve true cuando el valor es… |
|---|---|
is_float() / is_double() | un float (3.14, 1.5e3) |
is_int() | un entero (42) |
is_string() | una cadena ("3.14") |
is_numeric() | un número o una cadena numérica |
is_bool() | un booleano (true/false) |
Si solo necesitas saber "¿es esto algún tipo de número, incluida una versión en cadena?", usa is_numeric(). Si necesitas específicamente el tipo float, usa is_float().
Conclusión
is_float() (y su alias is_double()) comprueba si el tipo de una variable es float, devolviendo un booleano. Recuerda que evalúa el tipo, no el valor: los enteros y las cadenas numéricas devuelven false, incluso cuando representan números con decimales. Cuando trabajas con entrada de usuario —que llega como cadenas— combínala con is_numeric() o realiza una conversión con (float) antes de tratar un valor como float.