webForumDet fria alternativet

Fel med räkning av double datatyper

.NET

4 svar · 548 visningar · startad av Nickemannen

Medlem sedan aug. 20003 575 inlägg
Frågan#1

Jag gör i en loop följande

totaltValue += item.Value;

I ett fall när, båda är av typen double
totalValue = -25317.51
och item.Value = -15997.86

så blir resultatet -41315.369999999995 när det borde bli -41315,37
Detta inträffar i vissa andra fall också.

Varför inträffar detta? Kan jag undvika det?

Annars måste jag ju runda av efter varje uträkning och det känns lite tråkigt.

Medlem sedan aug. 20003 575 inlägg
#2

Antar att det har något med hur det ligger i minnet och hur datorn räknar, detta löste det iallfall.

_totalCredit = Math.Round(_totalCredit + item.Sum, 2);
Medlem sedan sep. 20011 914 inlägg
#3

Avrunding kan ge missvisande resultat.

Exempel:
3,333*199=663,267
3,33*199=662,67

663,267-662,67=0,597

Med stora tal(summor) kan felmarginalen bli väsentlig.

Medlem sedan juni 20008 205 inlägg
#4

Double och float är inte exakta, decimal är det däremot och är den datatyp man bör använda för valuta.

Medlem sedan aug. 20003 575 inlägg
#5

Självklart skall man använda decimal som ni säger!!!!

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)