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șteis_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.