La rappresentazione dei double...

Oggi mi è capitato questo problema con i double. Dopo le operazioni che vedete di seguito, effettuavo un arrotondamento che mi ha permesso di evidenziare il problema. Il double d è stato aggiunto come esempio corretto, prima avevo solo il double risultato. Il problema è causato dalla memorizzazione binaria dei double come numeri a virgola mobile. Questo può causare non pochi problemi visto che il tipo double è utilizzato spesso per rappresentare i prezzi.
double risultato = 1.0675;
risultato = risultato * 100;
double d = Double.Parse(risultato.ToString());
Console.WriteLine(risultato);
Console.WriteLine(d);
Console.ReadLine();

Un'altra soluzione del problema è usare i decimal.


Technorati tags:

Print | posted @ venerdì 6 giugno 2008 22:14

Comments on this entry:

Gravatar # re: La rappresentazione dei double...
by Mauro at 07/06/2008 00:24

Per i prezzi dovresti utilizzare una classe Currency, la quale internamente non deve assolutamente usare un double ma un long.
La tua classe dovrebbe memorizzare i valori come centesimi o frazioni ancora più piccole (4 decimali per dire), tanto con un long non hai problemi, non raggiungerai mai long.MaxValue

Per provare che un double non va bene per rappresentare una valuta, fai un ciclo che somma 10 cent alla volta (ossia 0.10), per dieci volte.
Finito il ciclo NON avrai un euro intero...

ciao ciao

Gravatar # re: La rappresentazione dei double...
by franx at 03/07/2008 16:11

un collega è incappato nello stesso problema, lavorando su SharePoint:
post
Comments have been closed on this topic.