doubleval()
Scopri doubleval() in PHP: converte un valore in float, alias esatto di floatval(). Sintassi, valori restituiti e regole di parsing delle stringhe.
Introduzione
La funzione doubleval() converte un valore in un float (un numero con parte decimale). È un alias esatto di floatval() — entrambe le funzioni condividono la stessa implementazione. Il nome esiste perché PHP storicamente chiamava il tipo in virgola mobile "double", e in PHP float e double sono lo stesso tipo.
Si ricorre a doubleval() (o floatval()) ogni volta che si dispone di un valore di tipo sconosciuto o misto — tipicamente una string proveniente da un form, da una query string o da un file — e si ha bisogno di un numero affidabile su cui eseguire operazioni aritmetiche.
Sintassi
doubleval(mixed $value): float$value è il valore da convertire. Può essere una string, un intero, un boolean o un altro scalare. La funzione restituisce il valore float di $value, oppure 0.0 quando il valore non può essere interpretato come numero.
Valori restituiti
Il modo in cui doubleval() tratta un valore dipende dal suo tipo:
- String numerica — analizzata fino al primo carattere non numerico (
"3.14"→3.14). - Intero / float — restituito come float (
42→42.0internamente). - Boolean —
true→1.0,false→0.0. null—0.0.- String non numerica —
0.0. - Array —
1.0per un array non vuoto,0.0per uno vuoto (con un avviso). Evitare di passare array.
Esempio di base
Si noti come l'output mostri 42 e 1, non 42.0 e 1.0. I valori sono float, ma echo stampa un float senza parte frazionaria senza il .0 finale. Per vedere esplicitamente il tipo float, usare var_dump():
<?php
var_dump(doubleval(42)); // float(42)
var_dump(doubleval(true)); // float(1)
var_dump(doubleval("3.14")); // float(3.14)
?>Parsing di stringhe con numeri iniziali
doubleval() legge la parte numerica iniziale di una string e si ferma al primo carattere che non può fare parte di un numero. Gli spazi iniziali vengono ignorati e la notazione scientifica è supportata.
<?php
echo doubleval("12.5kg") . "\n"; // 12.5 (stops at "k")
echo doubleval(" 7.0 ") . "\n"; // 7 (leading spaces ignored)
echo doubleval("1.2e3") . "\n"; // 1200 (scientific notation)
echo doubleval("abc12") . "\n"; // 0 (no leading number)
?>Ciò lo rende comodo per estrarre un numero da una string con unità di misura, ma significa anche che un valore malformato diventa silenziosamente 0.0 invece di generare un errore — validare prima se questa distinzione è importante.
doubleval() vs. cast (float)
Per i valori scalari, doubleval($x) e (float) $x producono lo stesso risultato, quindi il cast è generalmente preferito nel codice moderno. doubleval() è ancora utile come callback, ad esempio con array_map():
<?php
$inputs = ["1.5", "2", "3.75kg"];
$floats = array_map('doubleval', $inputs);
print_r($floats);
// Array ( [0] => 1.5 [1] => 2 [2] => 3.75 )
?>doubleval() vs. floatval()
Non c'è alcuna differenza funzionale — doubleval() è un alias definito di floatval(). Il codice moderno dovrebbe preferire floatval() perché il nome è più chiaro e corrisponde al nome del tipo float usato ovunque in PHP.
Conclusione
doubleval() converte qualsiasi valore scalare in un float, analizzando la parte numerica iniziale delle stringhe e tornando a 0.0 quando non viene trovato alcun numero. È identica a floatval(), che è il nome preferito oggi. Per la conversione ad altri tipi, vedere intval() e settype().