Problemi di calcolo Mysql: 1 + 1 = 1.999999999
Domanda
Il problema è questo, quando aggiungo due o più doppi da una tabella a una vista, invece di darmi i risultati giusti, aggiunge circa una decina di cifre. Ad esempio 0,5 + 1,5 = 1,99999999998 o 5,5 + 8,5 = 14,0000000001. Qualche idea? (So ??che questa è una specie di domanda n00b e ricordo di aver dovuto affrontare cose del genere negli esami di terza media, ma non riesco proprio a ricordare come l'ho fatto allora: P)
Soluzione
http://dev.mysql.com/ doc / refman / 5.0 / it / string-functions.html # function_format
Puoi formattare i numeri in questo modo se questo è il tuo dopo?
Altri suggerimenti
L'aggiunta di 1 e 1 come float o doppi non dovrebbe comportare altro che 2.
Trovo difficile credere che 0,5 + 1,5 sia uscito da qualsiasi cosa tranne 2.
Tutti questi numeri possono essere rappresentati correttamente in virgola mobile binaria.
Odio dire che non credo ai tuoi esempi, ma non lo credo. : -)
Tuttavia, credo che potresti avere problemi con un numero come 1.1.
Perché? Perché 1/10 risulta essere un decimale ripetuto in binario.
Il problema si presenta quando si tenta di convertire numeri in virgola mobile tra rappresentazioni decimali e binarie. Alcuni numeri rendono il viaggio perfetto, ma altri sono solo approssimativi.
Tuttavia, se i tuoi esempi funzionano davvero in questo modo, non ho idea di cosa stia accadendo e mi piacerebbe saperlo.
i numeri in virgola mobile sono SEMPRE semplici approssimazioni. :-) Se la precisione è importante, cerca un modo per usare numeri interi.
Nella mia esperienza, quando ho usato il tipo di dati decimale invece di float / double, ho sempre ottenuto risultati precisi.
Questo articolo spiega abbastanza bene il problema.
In poche parole, numeri in virgola mobile molto grandi o molto piccoli possono causare una perdita di precisione durante i calcoli.
Non aspettarti numeri interi quando lavori con tipi a virgola mobile.
Non sono sicuro se stai cercando una spiegazione o una soluzione, ma dal momento che hai già ottenuto indicazioni su buone spiegazioni ....
Se hai bisogno che i tuoi numeri si comportino come numeri interi, usa numeri interi. Se hai bisogno di un grado di precisione finito (cioè due posizioni decimali, per i campi che rappresentano il denaro), memorizzalo comunque come intero, ma moltiplicalo per qualunque fattore di 10 devi liberarti del decimale quando lo metti in il database e dividere per lo stesso quando lo si estrae.
Quindi, se stai rappresentando un widget che costa $ 3,99, inserisci 399 nel campo WIDGET.cost.
Non so se questo si applica alla tua situazione o meno. Ma la regola generale è che i numeri in virgola mobile sono SEMPRE semplici approssimazioni. :-) Se la precisione è importante, cerca un modo per usare numeri interi.