W3docs

is_finite()

Aprenda sobre a função is_finite() no PHP, usada para verificar se um valor é um número finito, diferente de INF, -INF ou NAN.

A função is_finite() no PHP indica se um número é finito — ou seja, um número normal que não é nem infinito (INF / -INF) nem NAN (Não é um Número). Esta página explica o que é considerado finito, como a função lida com valores não numéricos e quando você a usaria em código real.

Sintaxe

is_finite(float $num): bool
  • $num — o valor a ser testado. É tratado como float; strings numéricas e inteiros são convertidos automaticamente.
  • Valor de retornotrue se $num for um número finito, false se for INF, -INF ou NAN.

Por que "finito" importa

A aritmética de ponto flutuante pode produzir valores especiais que não são números comuns:

  • INF e -INF aparecem quando um resultado ultrapassa o intervalo de um float (por exemplo, dividindo por zero com floats ou PHP_FLOAT_MAX * 2).
  • NAN aparece para operações indefinidas como sqrt(-1) ou INF - INF.

Esses valores se propagam silenciosamente em cálculos posteriores e quebram comparações (NAN == NAN é até mesmo false). is_finite() permite detectá-los antes que corrompam a saída.

Exemplo básico

php— editable, runs on the server

Isso define uma variável para um número comum e imprime The number is a finite number, pois 10 é finito.

Como diferentes valores se comportam

O exemplo abaixo mostra o que is_finite() retorna para os casos extremos mais comuns:

<?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
?>

Observe que is_finite() não valida se um valor é numérico — ele converte primeiro. is_finite("hello") torna-se is_finite(0.0) e retorna true. Se você precisar confirmar que um valor é realmente um número, valide-o primeiro com is_numeric().

Um caso de uso prático

Um padrão comum é proteger um cálculo que pode transbordar para 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
?>

Aqui safeSquare() retorna null em vez de deixar INF vazar para o resto do programa, para que o chamador possa tratar a falha de forma limpa. (Observe que no PHP 8+, a divisão inteira/float por zero lança DivisionByZeroError em vez de produzir INF, portanto o overflow é a forma típica de encontrar um resultado infinito.)

Funções relacionadas

  • is_infinite() — a verificação oposta: retorna true para INF / -INF.
  • is_nan() — testa especificamente NAN.
  • is_numeric() — verifica se um valor é um número ou string numérica antes de realizar operações matemáticas.
  • is_float() — verifica se o tipo de uma variável é float.

Conclusão

is_finite() é uma proteção pequena, mas importante, quando você trabalha com aritmética de ponto flutuante no PHP. Ela retorna true apenas para números comuns e false para INF, -INF e NAN, permitindo capturar overflow e resultados indefinidos antes que se propaguem. Use-a junto com is_numeric() para validação de entrada e com is_infinite() / is_nan() quando precisar saber exatamente qual valor especial foi encontrado.

Prática

Prática
Qual é o uso correto da função 'is_finite' no PHP?
Qual é o uso correto da função 'is_finite' no PHP?
Was this page helpful?