[Db] Mysql e calcoli in virgola mobile
Marcello Vezzelli
marcello a vezz.it
Gio 11 Gen 2007 18:03:15 CET
Davide Michel 'ZioBudda' Morelli wrote:
> Marcello Vezzelli ha scritto:
>>
>> Usa double oppure decimal, che hanno precisione maggiore.
>
> Devo iniziare a ricredermi su mysql ?
Mah, in meglio o in peggio? :)
>
>> Gli arrotondamenti sono dovuti alla rappresentazione interna dei
>> numeri in virgola mobile.
>
> Se sballa per cosi' poco non oso immaginare per numeri piu' complessi.
Il "così poco" è un concetto che non esiste nella rappresentazione dei
numeri in virgola mobile con esponente e mantissa... la differenza tra
due numeri "consecutivi" dipende esclusivamente dalla precisione.
Se ci sono alcune conversioni double->float e viceversa nei vari
passaggi che fa mysql, si possono introdurre errori di rappresentazione
come quello che hai visto tu.
La cosa migliore da fare è usare la miglior precisione disponibile
(qualora non ci siano controindicazioni) e comunque utilizzare sempre
numeri arrotondati alla n-esima cifra significativa. Questo riduce di
molto gli errori di rappresentazione.
Quello 0.0099999997764826 che ti trovi, se lo tratti come
round(0.0099999997764826 * 1000) /1000
ti dà un bel 0.01 come ti aspetti.
Non è un problema di mysql ma è un problema dei numeri floating point.
Saluti
Marcello
Maggiori informazioni sulla lista
Db