浮点加法的问题

时间:2009-12-15 19:16:55

标签: c# floating-point precision

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

为什么会这样?

3 个答案:

答案 0 :(得分: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;)

答案 1 :(得分:1)

这是因为在base-10系统中代表了base-2个数字。

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

答案 2 :(得分:0)

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