浮点加法的问题

Jul*_*ian 0 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
Run Code Online (Sandbox Code Playgroud)

我得到的totalAmount的答案是5.97999954而不是5.98

为什么会这样?

jdm*_*hal 9

totalAmount在积累之前你说的是1.05.这将给出预期的结果:

1.05
4.93 +
------
5.98
Run Code Online (Sandbox Code Playgroud)

您将获得5.97999954,这基本上是IEEE浮点数最佳代表的答案,这是一种二进制格式,无法准确表达每个十进制数字.例如,相当常见的0.1 10具有无限的二进制浮点表示.0001100110011...2.

和维基百科链接,好的衡量标准:http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems ;)