字符串到数字的转换在javascript中无法给出预期的结果

字符串到数字的转换在javascript中无法给出预期的结果,javascript,Javascript,JavaScript数字本机支持通过该方法转换为二进制表示。为了对二进制表示形式执行一些操作,我将数字转换为二进制表示形式,然后再转换为数字,如下所示: 例1: (117).toString(2) => "1110101" Number("1110101") => 1110101 例2: (999999).toString(2) => "11110100001000111111" //I don't understand this Number("11110100001

JavaScript数字本机支持通过该方法转换为二进制表示。为了对二进制表示形式执行一些操作,我将数字转换为二进制表示形式,然后再转换为数字,如下所示:

例1:

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

Number("1110101") =>  1110101
例2:

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

//I don't understand this
Number("11110100001000111111") => 11110100001000112000
示例2是如何工作的,我希望结果是
111101000010011111
,但我收到了
1111010000100112000。


为什么
Number(“111101000010011111”)
返回
1111010000100112000

在javascript中,有一种称为
max safe integer的东西,上面的整数的计算很奇怪,正如您所看到的

在这里阅读更多关于它的信息

首先,在JS中没有二进制数格式,当你只写1和0时就可以使用,
1110101
的二进制数只有一百万、十万、一百零一,而不是117

JavaScript使用IEEE 754中规定的双精度浮点格式数字,只能安全地表示
-(2^53-1)
2^53-1
之间的整数。在JS中,这称为
Number.MAX\u SAFE\u INTEGER
。如果您同时查看最大整数和您的数字:

9007199254740991
11110100001000111111
很明显,十一个五分之一,一百一十万个四分之一,一百兆,十亿,十万一万一千,一百一十一个比最大整数大,所以你肯定会有精度损失

要从二进制数中获取一个以10为基数的整数,您可以传递一个基数作为第二个参数:

console.log(parseInt(“111101000010011111”,2))
使用
Number()
这样不会将其解析为二进制数,而是将其解释为基数10。你想对二进制数做什么操作?您可能不需要转换为二进制文件就可以完成此操作。尝试查找JavaScript二进制运算符。