我一直在阅读有关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.10
和0.1000
在您的表示中将是不同的数字。 (这不仅没有任何意义,而且对任何计算机来说都是一场噩梦)