is_float()
A função is_float() é uma função nativa do PHP que verifica se uma variável é do tipo float ou não. Um float representa um número decimal.
Introdução
is_float() é uma função nativa do PHP que verifica se uma variável contém um valor de ponto flutuante (um número com parte decimal, como 3.14). Ela retorna um boolean, sendo a forma padrão de confirmar que um valor é float antes de executar lógica exclusiva para floats.
Um ponto importante a entender de antemão: is_float() testa o tipo da variável, não o seu valor matemático. O inteiro 5 e o float 5.0 são iguais em valor, mas apenas 5.0 é um float. "3.14" (uma string de dígitos) também não é um float — mesmo parecendo um.
Esta página aborda a sintaxe, os casos comuns e as surpresas, como is_float() difere de funções relacionadas, e quando você realmente precisaria utilizá-la.
Sintaxe
is_float(mixed $value): bool| Parte | Significado |
|---|---|
$value | A variável a ser testada. Qualquer tipo é aceito. |
| Valor de retorno | true se $value for do tipo float, caso contrário false. |
is_double() é um alias de is_float() — elas se comportam de forma idêntica, então use o nome que for mais legível para você.
Exemplo básico
Ao usar echo em um boolean, o PHP imprime 1 para true e uma string vazia para false — por isso a segunda linha aparece em branco. Para ver um rótulo claro, use var_dump() em vez disso:
<?php
var_dump(is_float(3.14)); // bool(true)
var_dump(is_float(42)); // bool(false)
?>O que conta como float (e o que não conta)
O maior problema é que uma string numérica não é um float. is_float() retorna true apenas para valores que estão realmente armazenados com o 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
?>Note que 10 / 3 é um float mesmo que ambos os operandos sejam inteiros: a divisão no PHP retorna um float sempre que o resultado não for um número inteiro.
Lidando com strings numéricas
Se o seu valor pode ser uma string numérica (por exemplo, de $_GET, $_POST ou um arquivo CSV), is_float() retornará false. Use is_numeric() para detectar strings numéricas, ou faça o cast primeiro:
<?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 uma cobertura completa sobre detecção de entrada numérica, veja is_numeric() e PHP Data Types.
Um guard prático
Um uso comum é validar um valor antes de fazer cálculos que só fazem sentido em um 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
?>Funções relacionadas de verificação de tipo
| Função | Retorna true quando o valor é… |
|---|---|
is_float() / is_double() | um float (3.14, 1.5e3) |
is_int() | um inteiro (42) |
is_string() | uma string ("3.14") |
is_numeric() | um número ou uma string numérica |
is_bool() | um boolean (true/false) |
Se você precisar apenas de "é algum tipo de número, incluindo uma versão em string," use is_numeric(). Se você precisar especificamente do tipo float, use is_float().
Conclusão
is_float() (e seu alias is_double()) verifica se o tipo de uma variável é float, retornando um boolean. Lembre-se de que ela testa o tipo, não o valor: inteiros e strings numéricas retornam false, mesmo quando representam números com aspecto decimal. Ao trabalhar com entrada do usuário — que chega como strings — combine com is_numeric() ou faça cast com (float) antes de tratar um valor como float.