-6

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

这是发生的事情

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

4

1 回答 1

4

归根结底,这是因为某些以 10 为底的数字(如 0.9)不能以 2 为底以有限位数表示,就像分数 1/3 不能以 10 为底以有限位数表示(你得到 0.333 ...)。

0.9 转换为基数 2 是 0.1110011001100...,并且此二进制表示被截断,结果是接近0.9(基数 10)的数字,但略小

请注意,对于数字 0.9,您不会看到这种行为,因为浮点数的系数为 9,尾数为 -1。但是你看到它是 31.9,因为它的系数为 3.19(以 2 = 为底11.00>11000010100011110101<,标记之间的重复部分><)和 +1 的尾数。

于 2013-09-11T17:47:31.557 回答