只是为了给出其他人说的话背后的理由。
浮点数的二进制表示有点烦人。
在二进制语言中,大多数程序员都知道1b=1d,10b=2d,100b=4d,1000b=8d之间的相关关系。
嗯,它也是用另外一种方式工作的。
.1b=.5d,.01b=.25d,.001b=.125,.
问题是,没有精确的方法来表示大多数十进制数,如1,2,3等。你所能做的就是用二进制来表示。当数字打印时,系统会做一些模糊舍入,这样就可以显示.1,而不是.10000000000001或.999999999999(它们可能与存储的表示形式一样接近于.1)。
编辑评论:这是一个问题的原因是我们的期望。我们完全预计,当我们将2/3转换为十进制时,2/3会被伪造,无论是7、.67或.666667.但我们并不会自然而然地期望,1的四舍五入和2/3一样-这就是正在发生的事情。
顺便说一句,如果您好奇的话,它内部存储的数字是使用二进制“科学表示法”的纯二进制表示。所以,如果您告诉它存储十进制数10.75d,它将存储1010b的10,和.11b的小数。所以它会存储.1011,然后在结尾保存几个位,说:把小数点移到右边四位。
(虽然从技术上讲,它不再是小数点,但现在它是二进制点,但这一术语不会让大多数人更容易理解,因为他们会找到任何有用的答案。)