is_nan / is_finite / is_infinite în PHP

Verifică dacă un număr este NAN (is_nan), infinit (is_infinite) sau un număr normal, finit (is_finite).

Sintaxă
is_nan(float $num): bool

Ce face is_nan / is_finite / is_infinite

Unele calcule nu dau eroare, ci valori speciale: NAN („not a number”, de exemplu sqrt(-1)) sau INF (infinit, de exemplu log(0) dă -INF). Aceste valori se propagă în calculele următoare.

NAN nu este egal cu nimic, nici cu el însuși, deci $x == NAN este mereu fals. Verifică-l doar cu is_nan. is_infinite verifică INF și -INF, iar is_finite returnează true doar pentru numere obișnuite.

Parametri

Parametru Descriere
$num Numărul verificat.

Ce returnează

true sau false.

Exemple

Exemplul 1: Valorile speciale

<?php
$nan = sqrt(-1);
$inf = log(0);

var_dump(is_nan($nan));
var_dump($nan == $nan);
var_dump(is_infinite($inf));
var_dump(is_finite(1.5));
var_dump(is_finite($inf));

Rezultat

bool(true)
bool(false)
bool(true)
bool(true)
bool(false)

Exemplul 2: Validarea unui rezultat înainte de salvare

<?php
$valori = [12.5, fdiv(1, 0), sqrt(-4), 0.0];

foreach ($valori as $v) {
    echo var_export($v, true) . " => " . (is_finite($v) ? "salvez" : "ignor") . "\n";
}

Rezultat

12.5 => salvez
INF => ignor
NAN => ignor
0.0 => salvez

Greșeli frecvente

  • Compari cu NAN: if ($x == NAN) este mereu fals. Folosește is_nan($x).

Comenzi înrudite

  • sqrt: Calculează rădăcina pătrată a unui număr.
  • fdiv: Împarte două numere după standardul IEEE 754: împărțirea la zero dă INF sau NAN, nu eroare.
  • is_numeric: Verifică dacă o valoare este un număr sau un text care arată ca un număr.