PHP Galleggiante


Esempio

$float = 0.123;

Per ragioni storiche "double" viene restituito da gettype() in caso di float e non semplicemente "float"

I float sono numeri in virgola mobile, che consentono una maggiore precisione di output rispetto ai numeri interi semplici.

I float e gli interi possono essere usati insieme a causa del casting loose di PHP di tipi variabili:

$sum = 3 + 0.14;

echo $sum; // 3.14

php non mostra float come numero float come altre lingue, ad esempio:

$var = 1;
echo ((float) $var); //returns 1 not 1.0

avvertimento

Precisione in virgola mobile

(Dalla pagina di manuale di PHP )

I numeri in virgola mobile hanno una precisione limitata. Sebbene dipenda dal sistema, in genere PHP fornisce un errore relativo massimo a causa dell'arrotondamento nell'ordine di 1.11e-16. Le operazioni aritmetiche non elementari possono dare errori più grandi e la propagazione degli errori deve essere presa in considerazione quando si compongono diverse operazioni.

Inoltre, i numeri razionali che sono esattamente rappresentabili come numeri in virgola mobile nella base 10, come 0,1 o 0,7, non hanno una rappresentazione esatta come numeri in virgola mobile in base 2 (binari), che viene usata internamente, indipendentemente dalla dimensione della mantissa . Quindi, non possono essere convertiti nelle loro controparti binarie interne senza una piccola perdita di precisione. Ciò può portare a risultati confusi: ad esempio, floor ((0,1 + 0,7) * 10) restituirà solitamente 7 anziché 8 previsti, poiché la rappresentazione interna sarà qualcosa come 7.9999999999999991118 ....

Quindi non fidarti mai dei risultati di numeri fluttuanti sull'ultima cifra e non confrontare i numeri in virgola mobile direttamente per l'uguaglianza. Se è necessaria una maggiore precisione, sono disponibili le funzioni matematiche di precisione arbitrarie e le funzioni gmp.