parseInt转换超大二进制数输出错误,Node.js是否无法处理?
问题原因与解决方案
为什么结果错误?
JavaScript里的Number类型是64位双精度浮点数,它只能精确表示**2^53 - 1(即9007199254740991)**以内的整数。你提供的二进制字符串转十进制后是7048259459772055567,这个数值远大于2^53-1,所以用parseInt转换时,超出精度范围的部分会丢失,导致结果不准确。
正确的处理方式
使用JavaScript的BigInt类型来处理超大整数,它支持任意精度的整数运算,不会丢失精度。有两种写法可以得到正确结果:
直接给二进制字符串加上
0b前缀,传给BigInt:console.log(BigInt("0b110000111010000011100101010001010101000100000000000000000001111"));或者给
BigInt构造函数传入二进制字符串和基数2:console.log(BigInt("110000111010000011100101010001010101000100000000000000000001111", 2));
执行以上代码后,控制台会输出正确的数值7048259459772055567n(末尾的n是BigInt类型的标识,若需要转成普通字符串,可调用.toString()方法)。
内容的提问来源于stack exchange,提问作者yi long cheng
相关产品推荐
相关产品推荐

