首先,不要认为小数是“增加约 40%”。数字是相等的 - 它们只是使用不同的数字系统表示。
让我们看看将十进制数转换为二进制,然后再转换为十六进制时发生了什么。至少对我来说,这使它更容易理解:
取十进制数0.15
:在二进制中,它是0.0010 0110 0110 0110 0110 0110 0110 0110...
. (为清楚起见添加了空格。)注意到任何有趣的事情吗?如果您将这些四位块中的每一个转换为十六进制等价物,您将得到您的toString(16)
召唤给您的确切信息:(0.2666666...
二进制0010
=2
十六进制)。
为什么会这样?因为在小数点之后,您可以将每个条目视为2 的倒数。意思是小数点后的每一位代表:
.1 | .01 | .001 | .0001 | .00001... (BIN)
0.5 | 0.25 | 0.125 | 0.0625 | 0.03125... (DEC)
那么我们将如何1.5
用二进制表示?好吧,小数点前的一切都应该很容易(它只是1
),但在那之后,我们只需在 (binary) 处停止1.1
,因为1 + 0.5
(decimal) = 1.5
(decimal) = 1.1000
(binary)。
我在其中添加了一些额外的零以使下一次转换更容易,因为接下来我们将那块四位数据转换为十六进制,即简单的1.8
.