Domanda con aggiunta virgola mobile
-
19-09-2019 - |
Domanda
float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93
La risposta che ottengo per TotalAmount è 5,97,999954 millions invece di 5.98
Perché sta succedendo?
Soluzione
Lei afferma totalAmount
è 1,05, prima che l'accumulo. Questo darebbe risultati attesi:
1.05
4.93 +
------
5.98
Hai trovato 5,97,999954 millions, che è sostanzialmente la risposta come meglio rappresentato da IEEE in virgola mobile, che è un formato binario che non può esattamente esprimere ogni numero decimale. Per esempio, piuttosto comune 0,1 10 ha un infinito binario virgola mobile rappresentazione .0001100110011...
2 .
E un link di Wikipedia, per buona misura: http://en.wikipedia.org/ wiki / floating point # Accuracy_problems ;)
Altri suggerimenti
jdmichal è corretto, ma io aggiungo che, se si vuole realmente questo per aggiungere correttamente, è possibile utilizzare il tipo di decimale (compreso letterali decimali).