Originariamente inviato da piero.mac
il problema e' del float ed e' legato anche al OS e all'hardare usato.
per le valute usa decimal
Grazie,
sono contento che questa volta l'errore sia da far risalire al mondo delle macchine perché vuol dire che la mia logica ha ragione.
Stranissimo, sembra che l'errore si propaghi su tutte le funzioni, aggregate e non; ho provato con MIN, MAX etc e il risultato è lo stesso, l'errore c'è sempre.
Ho provato a lanciare una query di controllo:
$query = "SELECT SUM(price), COUNT(*), SUM(price)/COUNT(*), AVG(price) FROM tbl";
Risultato:
codice:
+-----------------+----------+----------------------+------------------+
| SUM(price) | COUNT(*) | SUM(price)/COUNT(*) | AVG(price) |
+-----------------+----------+----------------------+------------------+
| 429.15000152588 | 10 | 42.915000152588 | 42.915000152588 |
+-----------------+----------+----------------------+------------------+
Sistema operativo:
- Apache/2.0.52 (CentOS)
- PHP 4.3.9
- MySQL 4.1.20
Sto cercando su http://dev.mysql.com per vedere se esiste un bug segnalato alla MySQL AB per questa casistica.
Comunque poi ho modificato il tipo del campo price da FLOAT a DECIMAL(10,2).
La stessa query di sopra sembra lavorare bene:
codice:
+--------------+------------+----------------------+------------------+
| SUM(price) | COUNT(*) | SUM(price)/COUNT(*) | AVG(price) |
+--------------+------------+----------------------+------------------+
| 429.15 | 10 | 42.9150 | 42.915000 |
+--------------+------------+----------------------+------------------+
L'unico neo è che specificano il numero fino alla quarta cifra decimale. Almeno però è un numero corretto.