我已经阅读了很多浮点和舍入错误,但我没有发现任何特定于我的问题。
这是发生的事情
我加15.95然后加15.95,数字变为31.9(最后没有零)。然后,当我添加19.95时,它变为51.849999999999994。是什么导致这种情况发生?如果我需要提供实际代码,我可以这样做。谢谢!
答案 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。