Question

float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount  += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93

The answer I get for totalAmount is 5.97999954 instead of 5.98

Why is this happening?

Was it helpful?

Solution

You state that totalAmount is 1.05, before the accumulation. That would give expected results of:

1.05
4.93 +
------
5.98

You are getting 5.97999954, which is basically the answer as best represented by IEEE floating point, which is a binary format that cannot exactly express every decimal number. For instance, the rather common 0.110 has an infinite binary floating point representation .0001100110011...2.

And a Wikipedia link, for good measure: http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems ;)

OTHER TIPS

This is due to representing base-10 numbers in a base-2 system.

Floating point math on computers always does this. If you know the level of precision you'll need you should use the appropriate decimal representation.

jdmichal is correct, but I'll add that, if you actually want this to add up correctly, you could use the Decimal type (including decimal literals).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top