2015-11-15 9 views
6

Come descritto in Is floating point math broken?, 0.1 + 0.2 restituisce 0.30000000000000004 nella maggior parte dei linguaggi di programmazione.Perché PHP può calcolare 0.1 + 0.2 quando altre lingue falliscono?

Tuttavia, PHP, presumibilmente a causa di essere il migliore di tutti i linguaggi di programmazione, è in grado di calcolare 0,1 + 0,2 correttamente:!

php >echo 0.1 + 0.2; 
0.3 
php >var_dump(0.1 + 0.2); 
float(0.3) 

Tuttavia, nonostante l'output mostrato sopra, 0,1 + 0,2 = 0,3 :

php >var_dump(0.1 + 0.2 == 0.3); 
bool(false) 

Cosa sta succedendo qui?

+2

mi hai fatto lol a "PHP di essere il migliore di tutti". È uno dei più magici, però, che potrebbe essere il motivo per cui nasconde l'errore di precisione da te, mentre ovviamente è ancora lì. – GolezTrol

risposta

9

PHP ha un valore di configurazione precision che imposta il numero di cifre significative visualizzate nei numeri in virgola mobile. Di default è 14, motivo per cui 0.1 + 0.2 viene visualizzato come 0.3.

Se, tuttavia, si esegue questa operazione:

ini_set('precision', 17); 
echo 0.1 + 0.2; 

si ottiene 0.30000000000000004

Problemi correlati