JavaScript中的字符串转数字无法给出预期结果

3

JavaScript中,数字可以通过 Number#toString() 方法原生地转换成二进制表示。为了对这些二进制数据进行操作,我按以下方法将数字转换为二进制表示,再转换回数字:

示例1:

(117).toString(2) => "1110101"

Number("1110101") =>  1110101

示例2:

(999999).toString(2) => "11110100001000111111"

//I don't understand this
Number("11110100001000111111") => 11110100001000112000

Example 2是如何工作的?我预期结果应该是11110100001000111111,但我收到了11110100001000112000。

为什么Number("11110100001000111111")返回11110100001000112000


使用 Number() 不会将其解析为二进制数,它会将其解释为十进制数。您要对二进制数执行什么操作?您可能可以在不转换为二进制的情况下完成它。尝试查找JavaScript二进制运算符。 - obermillerk
2个回答

4
首先,在JS中,当你只写1和0时并没有二进制数格式,例如:1110101只是一百十万一千一百零一,而不是117的二进制数。
JavaScript使用IEEE 754规定的双精度浮点数格式,并且只能安全地表示介于-(2^53 - 1)和2^53-1之间的整数。在JS中,这被称为Number.MAX_SAFE_INTEGER。如果你将最大整数和你的数字并排比较:
9007199254740991
11110100001000111111

很明显,1110111111010000000000000000000000000000000000000000000000000000比最大整数还要大,所以你必须面对精度丢失的问题。

如果你想从一个二进制数得到一个十进制整数,可以在parseInt函数中传入基数作为第二个参数:

console.log(parseInt("11110100001000111111", 2))


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接