W3docs

floatval()

La función floatval() en PHP convierte una variable a un número float (punto flotante). Es similar a la función doubleval().

Introducción

La función floatval() es una función integrada de PHP que devuelve el valor float (punto flotante) de una variable. Se usa cuando se tiene un valor de tipo incierto —normalmente un string proveniente de un formulario, una cadena de consulta, un archivo CSV o un payload JSON— y se desea asegurarse de trabajar con un número sobre el que se puede realizar operaciones aritméticas.

floatval() es un alias de doubleval(). PHP no tiene un tipo double separado —float y double son lo mismo—, por lo que ambas funciones son intercambiables; floatval() es la forma que se debe preferir en código nuevo.

Esta página cubre la sintaxis, cómo la función analiza distintas entradas (incluida la regla sobre strings que puede sorprender al principio), cómo se compara con el cast (float) y las advertencias que conviene conocer.

Sintaxis

float floatval(mixed $value)

Recibe un único argumento, $value, y devuelve su valor float. El argumento debe ser un escalar (string, int, float o boolean); pasar un array devuelve 1.0 para un array no vacío y 0.0 para uno vacío, y pasar un object genera un error.

Ejemplo de uso

El siguiente ejemplo convierte varios tipos distintos e imprime el resultado. Nótese que floatval() devuelve un float, pero cuando PHP imprime un float de número entero con echo omite el .0 final —por lo que 42.0 se muestra como 42.

php— editable, runs on the server

Aquí $var1 es un string numérico, $var2 es un entero, $var3 es un boolean y $var4 es un string sin número al principio. Cada uno se convierte a float. Para confirmar que el resultado realmente es un float (en lugar de confiar en lo que muestra echo), envuelva un valor en var_dump(): var_dump(floatval(42)); imprime float(42).

Cómo se analizan los strings

Esta es la parte que puede confundir. Cuando se le pasa un string, floatval() lee la porción numérica inicial y se detiene en el primer carácter que no puede formar parte de un número. No requiere que todo el string sea numérico.

<?php
echo floatval("12.5abc") . "\n"; // 12.5  (stops at "a")
echo floatval("  7.0kg")  . "\n"; // 7     (leading whitespace is skipped)
echo floatval("1.0e3")    . "\n"; // 1000  (scientific notation is understood)
echo floatval("$199.99")  . "\n"; // 0     (starts with "$", no leading number)
echo floatval("0x1A")     . "\n"; // 0     (hex strings are NOT parsed)
echo floatval("")         . "\n"; // 0     (empty string)
?>

Las reglas clave:

  • Los espacios en blanco iniciales se ignoran; el análisis comienza en el primer carácter no espacial.
  • La notación científica (1.0e3) y un signo inicial (-3.5, +2) son reconocidos.
  • El análisis se detiene en el primer carácter no numérico, y todo lo que siga se descarta.
  • Si no hay ningún número al inicio, el resultado es 0.0. Eso significa que un string de moneda como "$199.99" devuelve 0, no 199.99 —hay que eliminar el símbolo primero.
  • Los strings hexadecimales como "0x1A" se tratan como el número 0, porque el análisis se detiene en la x.

floatval() vs. el cast (float)

floatval($x) y (float) $x producen el mismo resultado para entradas escalares, por lo que para un único valor el cast es más conciso:

<?php
$price = "49.95 USD";
echo floatval($price) . "\n"; // 49.95
echo (float) $price   . "\n"; // 49.95
?>

La ventaja de floatval() es que es callable. Se puede pasar directamente a funciones de orden superior donde no puede ir una palabra clave de cast:

<?php
$inputs = ["1.5", "2.25", "x", "3"];
$floats = array_map('floatval', $inputs);
print_r($floats);
// Array ( [0] => 1.5 [1] => 2.25 [2] => 0 [3] => 3 )
?>

Si se necesita una validación estricta —rechazando cualquier valor que no sea un número limpio en lugar de convertirlo silenciosamente—, use is_numeric() o filter_var($x, FILTER_VALIDATE_FLOAT) antes de convertir, ya que floatval() nunca informa fallos.

Cuándo usarlo

  • Normalizar la entrada del usuario ($_POST, $_GET) o datos CSV/texto antes de hacer cálculos matemáticos.
  • Como callback para array_map(), comparaciones con usort() y similares.
  • Convertir un valor cuyo tipo no se controla a un float garantizado.

Si se necesita un entero en su lugar, use intval(); para cambiar el tipo de una variable en el lugar use settype(); para comprobar un tipo use gettype() o is_float(). Para una visión general de cómo PHP maneja los tipos, consulte PHP Data Types.

Conclusión

floatval() devuelve el valor float de cualquier escalar y nunca lanza excepciones ante entradas incorrectas —vuelve a 0.0 en su lugar. Eso la hace conveniente, pero también significa que se debe validar primero cuando un número faltante o mal formado debe tratarse como un error. Recuerde la regla del string numérico inicial ("12.5abc" se convierte en 12.5, "$199.99" se convierte en 0) y prefiera floatval() sobre un cast cuando necesite pasar la conversión como un callback.

Práctica

Práctica
¿Cuál es la función y el uso de floatval en PHP?
¿Cuál es la función y el uso de floatval en PHP?
Was this page helpful?