JavaScript数字本身支持通过Number#toString()方法将二进制表示转换为二进制表示。为了对二进制表示执行一些操作,我将数字转换为二进制表示,随后转换为数字,如下所示,
例1:
(117).toString(2) => "1110101"
Number("1110101") => 1110101例2:
(999999).toString(2) => "11110100001000111111"
//I don't understand this
Number("11110100001000111111") => 11110100001000112000示例2是如何工作的,我希望结果是11110100001000111111,但我收到了11110100001000112000.
为什么Number("11110100001000111111")返回11110100001000112000
发布于 2018-09-08 19:00:14
首先,在JS中没有二进制数字格式,当您只编写1和0时,1110101仅为100万,11万,101,而不是117个二进制。
JavaScript使用IEEE 754中指定的双精度浮点格式数字,并且只能安全地表示-(2^53 - 1)和2^53 - 1之间的整数。在JS中,这被称为Number.MAX_SAFE_INTEGER。如果您同时查看最大值int和数字:
9007199254740991
11110100001000111111很明显,十一个十分之一,一百一十个四万亿,一百一万亿,十亿,11.1万,一百一十一个都大于最大整数,所以你必然会有精度损失。
要从二进制数字中获得一个基数为10的整数,您可以传递parseInt一个基数作为第二个参数:
console.log(parseInt("11110100001000111111", 2))
发布于 2018-09-08 18:58:38
在javascript中有一种叫做max safe integer的东西,上面的整数计算就像你看到的那样很奇怪。
在这里阅读更多关于它的INTEGER
https://stackoverflow.com/questions/52238348
复制相似问题