Originariamente inviato da filippo.toso
Sei tu che non hai mai letto il manuale:

http://php.net/manual/en/language.types.float.php
Si ok, la precisione del float è di 14 decimali, ammetto che non avevo letto quella pagina..
A me però ne servono solo 6, o meglio, 2 quando stampo il numero.

Spiegami perchè i decimali di questi due numeri sono diversi:

Codice PHP:
$primo number_format(2.7152'.''');
var_dump($primo);
//string(4) "2.7[b]2[/b]"
$secondonumber_format(262.7152'.''');
var_dump($secondo); 
//string(6) "262.7[b]1[/b]" 
Ho notato che con qualsiasi numero < 256 l'approssimazione dei decimali 0.715 la restitiusce come 0.72 (approssima quel 0.005 in eccesso, come è giusto che sia d'altronde).

Se invece il numero è maggiore di 256, considera lo 0.005 in difetto, restituendo 0.71.

Questo mi causa un bel pò di problemi, per delle semplici somme:

Codice PHP:
$a 163.2;
$b 32.4;
$c 14.4;
$d 50;
$e 2.715;

$a_stampa number_format($a2',''');
$b_stampa number_format($b2',''');
$c_stampa number_format($c2',''');
$d_stampa number_format($d2',''');
$e_stampa number_format($e2',''');

//number_format restituisce delle stringhe.
printf("Sommo %s + %s + %s + %s + %s"$a_stampa$b_stampa$c_stampa$d_stampa$e_stampa);

$somma $a $b $c $d $e;
$somma_stampa number_format($somma2',''');
printf("
Il risoltato: %s"
$somma_stampa);

//Output:
//Sommo 163,20 + 32,40 + 14,40 + 50,00 + 2,72
//Il risoltato: 262,71 
Quel 0.715 è un problema.
Perchp se l'intero è < 256 lo arrotonda correttamente, altrimenti in difetto!?