我们从你的十进制数开始59.858139
将该数字转换为二进制:111011.11011011101011101111111101011100011011000001000110100001000100...
即数字是二进制的无限小数。无法准确表示。(就像不可能用十进制数字精确表示 1/3 一样)
将数字重写为某种形式的二进制科学记数法:
10 ^ 101 * 1.1101111011011101011101111111101011100011011000001000110100001000100...
请记住,这仍然是二进制,因此10 ^ 101
对应2 ^ 5
于十进制。
现在...浮点值可以在尾数中存储 23 位。如果我们使用“四舍五入”舍入模式将其四舍五入,我们得到:
10 ^ 101 * 1.11011110110111010111100
这等于:
111011.110110111010111100
这就是适合浮点数据类型的所有精度。现在将其转换回十进制:
59.8581390380859375
实际上似乎非常接近 59.858139……但这只是运气。如果我们将第二个最接近的浮点值转换为二进制会发生什么?
111011.110110111010111011 = 59.858135223388671875
所以基本上分辨率大约是0.000004
.
所以我们可以从浮点值中真正知道的是这个数字是这样的:59.858139
±0.000002
它也可以是59.858137
or 59.858141
。
由于最后一位数字相当不确定,我猜测打印代码足够聪明,可以理解最后一位数字超出浮点值的精度,因此,该值被舍入为59.85814
.
顺便说一句,如果你(像我一样)懒得手动在二进制和十进制之间转换,你可以使用这个转换器。如果您想了解更多关于浮点系统的详细信息,浮点表示的维基百科页面是一个很好的资源。