0
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

为什么会这样?

4

3 回答 3

9

你说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 ;)

于 2009-12-15T19:23:35.343 回答
1

这是由于代表在base-2系统中表示base-10数字。

计算机上的浮点数学总是这样做的。如果您知道您需要的精度级别,您应该使用适当的十进制表示。

于 2009-12-15T19:19:29.657 回答
0

jdmichal 是正确的,但我要补充一点,如果您真的希望它正确相加,您可以使用 Decimal 类型(包括十进制文字)。

于 2009-12-15T19:30:05.797 回答