我一直在阅读有关Java中的浮点类型(例如double)的信息。
我也一直在阅读有关将分数转换为二进制以及如何执行的信息。
我可以进行数学计算,发现以二进​​制表示0.2是以下近似值:

0.00110011001100...


但是二进制2是10。
那么,为什么不能只说0.2(以10为底)等于0.10(以2为底)呢?

我读过类似的question,但是我对此仍然感到困惑

另一个例子是5.8

101.110011001100...


我们为什么不能做:101.1000因为二进制中的8是1000

我知道0.10和0.1000相同,但是在这种情况下它们是分开的。

最佳答案

因为这将与不同基数中的数字表示形式的工作方式不一致:

如果您有一个二进制数,请说1100.101它以2为底表示,因此要将其转换为10为底,您需要执行以下操作:

... 2^3   2²   2^1  2^0  .  2^-1   2^-2   2^-3 ...
    1     1    0    0    .  1      0      1


这意味着您有2^3 + 2² + 2^-1 + 2^-3 = the number in base 10

请注意,指数如何始终总是从左到右减少1。因此,基本上,当您向右移动一位数字时,即除以基数,在本例中为2

这就是在任何给定的B底中表示数字的方式。

... B^3   B²   B^1  B^0  .  B^-1   B^-2   B^-3 ...


对于您的示例,它意味着:

0.2 = 2 * 10^-1   //base 10 (= 0.2 in base 10)
0.2 = 2 * 2^-1    //base 2
0.1 = 1 * 10^-1   //base 10
0.1 = 1 * 2^-1    //base 2  (= 0.5 in base 10)


这就是为什么以10为底的0.2不是也不能是以2为底的0.1的原因。

您甚至还自己说过,0.100.1000在您的表示中将是不同的数字。 (这不仅没有任何意义,而且对任何计算机来说都是一场噩梦)

07-24 09:45