W3docs

floatval()

La funzione floatval() è una funzione built-in di PHP che converte una variabile in un numero float (virgola mobile). È simile alla funzione doubleval(),

Introduzione

La funzione floatval() è una funzione built-in di PHP che restituisce il valore float (virgola mobile) di una variabile. La si utilizza ogni volta che si ha un valore di tipo incerto — tipicamente una string proveniente da un form, da una query string, da un file CSV o da un payload JSON — e si vuole essere sicuri di lavorare con un numero su cui si possono eseguire operazioni aritmetiche.

floatval() è un alias di doubleval(). PHP non ha un tipo double separato — float e double sono la stessa cosa — quindi le due funzioni sono intercambiabili; floatval() è la forma da preferire nel nuovo codice.

Questa pagina tratta la sintassi, il modo in cui la funzione analizza i diversi input (inclusa la regola che all'inizio può sorprendere per le string), il confronto con il cast (float) e i trabocchetti da conoscere.

Sintassi

float floatval(mixed $value)

Accetta un singolo argomento, $value, e restituisce il suo valore float. L'argomento dovrebbe essere uno scalare (string, int, float o boolean); passare un array restituisce 1.0 per un array non vuoto e 0.0 per uno vuoto, mentre passare un object genera un errore.

Esempio di utilizzo

L'esempio seguente converte diversi tipi e stampa il risultato. Si noti che floatval() restituisce un float, ma quando PHP stampa un float con valore intero tramite echo omette il .0 finale — quindi 42.0 viene visualizzato come 42.

php— editable, runs on the server

Qui $var1 è una string numerica, $var2 è un intero, $var3 è un boolean e $var4 è una string senza numero iniziale. Ognuno viene convertito in float. Per verificare che il risultato sia effettivamente un float (invece di affidarsi a ciò che echo mostra), avvolgere un valore in var_dump(): var_dump(floatval(42)); stampa float(42).

Come vengono analizzate le string

Questa è la parte che coglie di sorpresa. Quando riceve una string, floatval() legge la parte numerica iniziale e si ferma al primo carattere che non può far parte di un numero. Non richiede che l'intera string sia numerica.

<?php
echo floatval("12.5abc") . "\n"; // 12.5  (stops at "a")
echo floatval("  7.0kg")  . "\n"; // 7     (leading whitespace is skipped)
echo floatval("1.0e3")    . "\n"; // 1000  (scientific notation is understood)
echo floatval("$199.99")  . "\n"; // 0     (starts with "$", no leading number)
echo floatval("0x1A")     . "\n"; // 0     (hex strings are NOT parsed)
echo floatval("")         . "\n"; // 0     (empty string)
?>

Le regole principali:

  • Gli spazi iniziali vengono ignorati; la scansione inizia dal primo carattere non-spazio.
  • La notazione scientifica (1.0e3) e un segno iniziale (-3.5, +2) sono riconosciuti.
  • L'analisi si ferma al primo carattere non numerico e tutto ciò che segue viene scartato.
  • Se non c'è alcun numero iniziale, il risultato è 0.0. Ciò significa che una string come "$199.99" produce 0, non 199.99 — rimuovere prima il simbolo.
  • Le string esadecimali come "0x1A" vengono trattate come il numero 0, perché la scansione si ferma alla x.

floatval() vs. il cast (float)

floatval($x) e (float) $x producono lo stesso risultato per input scalari, quindi per un singolo valore il cast è più breve:

<?php
$price = "49.95 USD";
echo floatval($price) . "\n"; // 49.95
echo (float) $price   . "\n"; // 49.95
?>

Il vantaggio di floatval() è che è callable. Può essere passata direttamente a funzioni di ordine superiore dove una parola chiave di cast non può essere usata:

<?php
$inputs = ["1.5", "2.25", "x", "3"];
$floats = array_map('floatval', $inputs);
print_r($floats);
// Array ( [0] => 1.5 [1] => 2.25 [2] => 0 [3] => 3 )
?>

Se si ha bisogno di una validazione rigorosa — rifiutando qualsiasi cosa che non sia un numero pulito invece di convertirla silenziosamente — usare is_numeric() o filter_var($x, FILTER_VALIDATE_FLOAT) prima di convertire, poiché floatval() non segnala mai un fallimento.

Quando usarla

  • Normalizzare l'input dell'utente ($_POST, $_GET) o dati CSV/testo prima di eseguire calcoli.
  • Come callback per array_map(), confronti con usort() e simili.
  • Convertire un valore il cui tipo non si controlla in un float garantito.

Se si vuole un intero invece, usare intval(); per cambiare il tipo di una variabile in-place usare settype(); per verificare un tipo usare gettype() o is_float(). Per una panoramica su come PHP gestisce i tipi, vedere PHP Data Types.

Conclusione

floatval() restituisce il valore float di qualsiasi scalare e non genera mai errori su input non validi — torna a 0.0 invece. Questo la rende conveniente, ma significa anche che si dovrebbe validare prima quando un numero mancante o malformato deve essere trattato come un errore. Ricordare la regola della string numerica iniziale ("12.5abc" diventa 12.5, "$199.99" diventa 0) e scegliere floatval() rispetto a un cast ogni volta che si deve passare la conversione come callback.

Esercizi

Pratica
Qual è la funzione e l'utilizzo di floatval in PHP?
Qual è la funzione e l'utilizzo di floatval in PHP?
Was this page helpful?