首先是一些背景:
我们知道 JavaScript 数字是 64 位值,但并非所有这些 64 位都可用于表示整数。因此 JavaScript 不能代表所有的2^64
数字。
但是,它可以代表所有2^52
整数。
所以简单的问题是:绝对不可能进行 64 位二进制到十进制的转换吗?或者有一些黑客。
另外,这有点令人困惑,因为我不明白发生了什么......
>>> str_64_1s = '111111111111111111111111111111111111111111111111111111111111111'; >>> d = parseInt(str_64_1s, 2) 18446744073709552000 >>> d.toString(2) "100000000000000000000000000000000000000000000000000000000000000000" // 1 个 + 64 个零 >>> parseInt(d.toString(2), 2) 18446744073709552000 >>> parseInt(d.toString(2), 2) === d 真的 Math.pow(2, 64) == d 真的
一些相关的讨论: