is_double()
La funzione is_double() è un alias deprecato di is_float() in PHP. Verifica se una variabile è un float. Scopri la sintassi e i casi d'uso.
Introduzione
is_double() era un alias di is_float() che verifica se una variabile contiene un numero in virgola mobile. Un float (detto anche double) è il tipo di dato che PHP usa per i numeri con parte frazionaria, come 3.14 o 1.0e6.
Importante:
is_double()è stato deprecato da tempo e rimosso in PHP 8.0.0. In qualsiasi versione di PHP, è preferibile usareis_float()— il comportamento è identico, è supportato e risulta più chiaro da leggere. Questa pagina documentais_double()in modo che tu possa riconoscerlo e aggiornare il codice legacy che lo utilizza ancora.
Questo capitolo tratta la sintassi, cosa viene considerato un float, il comportamento del valore restituito, il sostituto consigliato e i problemi più comuni.
Sintassi
is_double(mixed $value): boolAccetta un solo parametro, $value, la variabile da testare, e restituisce true se $value è di tipo float, false altrimenti. Il controllo riguarda il tipo, non se il numero appare decimale — vedi i problemi comuni qui sotto.
Cosa viene considerato un float
is_double() (e is_float()) restituisce true solo quando il tipo runtime della variabile è float. Le stringhe numeriche e i numeri interi non sono float:
<?php
var_dump(is_float(3.14)); // bool(true)
var_dump(is_float(1.0e6)); // bool(true) — scientific notation is a float
var_dump(is_float(42)); // bool(false) — this is an int
var_dump(is_float("3.14")); // bool(false) — this is a string
var_dump(is_float(10 / 2)); // bool(true) — division always yields a float in PHP
?>Nota che 10 / 2 è true: in PHP, l'operatore / produce sempre un float, anche quando il risultato è matematicamente un numero intero.
Esempio di utilizzo
Poiché il print di valori boolean è fuorviante (true stampa 1, false non stampa nulla), usa var_dump() per vedere il risultato reale:
$price è un float genuino, quindi il controllo è true. $count è un intero e $label è una stringa, quindi entrambi sono false.
Il sostituto moderno: is_float()
Sostituire is_double() è semplicemente una rinomina — gli argomenti e il valore restituito sono gli stessi:
<?php
// Legacy (removed in PHP 8.0)
// if (is_double($value)) { ... }
// Modern, supported everywhere
$value = 9.99;
if (is_float($value)) {
echo "It's a float";
}
?>Se hai bisogno di accettare numeri che potrebbero essere un float, un intero o una stringa numerica (ad esempio, input da form), usa is_numeric() oppure converti con floatval().
Problemi comuni
- Le stringhe numeriche non superano il controllo.
is_float("3.14")èfalse. L'input degli utenti dai form o da$_GETarriva come stringa; convalida prima conis_numeric(), poi esegui il cast confloatval(). - Non confrontare i float per uguaglianza esatta. A causa dell'arrotondamento binario,
0.1 + 0.2 == 0.3èfalse. Confronta invece con una piccola tolleranza. is_doublenon esiste più in PHP 8+. Chiamarlo su PHP 8.0 o versioni successive genera unErrorfatale:Call to undefined function is_double().
Vedi anche
is_float()— la funzione attuale e supportata.is_int()— verifica i valori interi.is_numeric()— verifica numeri o stringhe numeriche.floatval()— converte un valore in float.gettype()— ispeziona direttamente il tipo di una variabile.
Conclusione
is_double() è un alias rimosso di is_float(). Per il nuovo codice, usa sempre is_float() per verificare se un valore è un numero in virgola mobile, e tieni presente is_double() solo per aggiornare i progetti legacy quando li migri a PHP 8 o versioni successive.