is_float()
La funzione is_float() di PHP verifica se una variabile è di tipo float. Scopri sintassi, esempi pratici e differenze rispetto a is_numeric().
Introduzione
is_float() è una funzione PHP integrata che verifica se una variabile contiene un valore in virgola mobile (un numero con parte decimale, come 3.14). Restituisce un boolean, quindi è il modo standard per confermare che un valore è un float prima di eseguire logica riservata ai float.
Un aspetto fondamentale da capire subito: is_float() verifica il tipo della variabile, non il suo valore matematico. L'intero 5 e il float 5.0 sono uguali in valore, ma solo 5.0 è un float. Anche "3.14" (una stringa di cifre) non è un float — anche se visivamente lo sembra.
Questa pagina illustra la sintassi, i casi comuni e le sorprese, le differenze tra is_float() e le funzioni correlate, e quando usarla concretamente.
Sintassi
is_float(mixed $value): bool| Parte | Significato |
|---|---|
$value | La variabile da testare. Accetta qualsiasi tipo. |
| Valore restituito | true se $value è di tipo float, altrimenti false. |
is_double() è un alias di is_float() — si comportano in modo identico, quindi usa il nome che ti sembra più leggibile.
Esempio di base
Quando si usa echo su un boolean, PHP stampa 1 per true e una stringa vuota per false — ecco perché la seconda riga appare vuota. Per ottenere un'etichetta chiara, usa invece var_dump():
<?php
var_dump(is_float(3.14)); // bool(true)
var_dump(is_float(42)); // bool(false)
?>Cosa conta come float (e cosa no)
Il trabocchetto più comune è che una stringa numerica non è un float. is_float() restituisce true solo per i valori effettivamente memorizzati con il 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
?>Nota che 10 / 3 è un float anche se entrambi gli operandi sono interi: la divisione in PHP restituisce un float quando il risultato non è un numero intero.
Gestione delle stringhe numeriche
Se il valore potrebbe essere una stringa numerica (ad esempio da $_GET, $_POST o un file CSV), is_float() restituirà false. Usa is_numeric() per rilevare le stringhe numeriche, oppure esegui prima un cast:
<?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
?>Per una copertura completa sul rilevamento degli input numerici, vedi is_numeric() e PHP Data Types.
Un controllo pratico
Un utilizzo comune è la validazione di un valore prima di eseguire operazioni matematiche che hanno senso solo su un 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
?>Funzioni correlate per la verifica dei tipi
| Funzione | Restituisce true quando il valore è… |
|---|---|
is_float() / is_double() | un float (3.14, 1.5e3) |
is_int() | un intero (42) |
is_string() | una stringa ("3.14") |
is_numeric() | un numero o una stringa numerica |
is_bool() | un boolean (true/false) |
Se hai solo bisogno di sapere "è un qualsiasi tipo di numero, inclusa la versione stringa", usa is_numeric(). Se hai specificamente bisogno del tipo float, usa is_float().
Conclusione
is_float() (e il suo alias is_double()) verifica se il tipo di una variabile è float, restituendo un boolean. Ricorda che verifica il tipo, non il valore: interi e stringhe numeriche restituiscono entrambi false, anche quando rappresentano numeri con parte decimale. Quando lavori con input dell'utente — che arriva come stringa — abbinala a is_numeric() oppure esegui un cast con (float) prima di trattare un valore come float.