简体   繁体   中英

Question with floating point addition

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?

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.1 10 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 ;)

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是正确的,但我要补充一点,如果您实际上希望将此值正确加起来,则可以使用Decimal类型(包括十进制文字)。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM