在C#应用程序中添加双打产生奇怪的结果

时间:2013-09-11 17:38:15

标签: c#

我已经阅读了很多浮点和舍入错误,但我没有发现任何特定于我的问题。

这是发生的事情

我加15.95然后加15.95,数字变为31.9(最后没有零)。然后,当我添加19.95时,它变为51.849999999999994。是什么导致这种情况发生?如果我需要提供实际代码,我可以这样做。谢谢!

1 个答案:

答案 0 :(得分:4)

最终,这是因为一些基数为10的数字(如0.9)不能用有限数字的数字在基数2中表示,就像1/3部分不能用有限数字的基数10表示一样(你得到0.333 ......)。

0.9转换为基数2是0.1110011001100 ...,这个二进制表示被截断,结果是数字接近 0.9(基数10),但略微更小。

请注意,会使用数字0.9来查看此行为,因为float的系数为9,尾数为-1。但你用31.9看到它,因为它的系数为3.19(基数2 = 11.00>11000010100011110101<,重复><标记之间的部分)和尾数+ 1。