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)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top