float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93
我得到的 totalAmount 答案是 5.97999954 而不是 5.98
为什么会这样?
float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93
我得到的 totalAmount 答案是 5.97999954 而不是 5.98
为什么会这样?
你说totalAmount
的是1.05,在积累之前。这将给出以下预期结果:
1.05
4.93 +
------
5.98
您将得到 5.97999954,这基本上是 IEEE 浮点数所代表的最佳答案,这是一种二进制格式,无法准确表达每个十进制数。例如,相当常见的 0.1 10具有无限二进制浮点表示.0001100110011...
2。
还有一个维基百科链接,很好的衡量标准:http ://en.wikipedia.org/wiki/Floating_point#Accuracy_problems ;)
jdmichal 是正确的,但我要补充一点,如果您真的希望它正确相加,您可以使用 Decimal 类型(包括十进制文字)。