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
?
答案 0 :(得分:4)
首先,当您只写1和0时,JS中没有使用二进制数字格式,1110101
只是一百万,十一万,一百一十,而不是117。
JavaScript使用IEEE 754中指定的双精度浮点格式数字,并且只能安全地表示-(2^53 - 1)
和2^53 - 1
之间的整数。在JS中,这称为Number.MAX_SAFE_INTEGER
。如果您同时查看max int和您的数字:
9007199254740991
11110100001000111111
很明显,十个十亿分之一,一百一十个十亿分之一,一百万亿,十亿,十一万一千,一百一十一比最大int大,因此您必然会有精度损失。
要从二进制数中获取以10为底的整数,可以将parseInt
的基数作为第二个参数传递:
console.log(parseInt("11110100001000111111", 2))
答案 1 :(得分:0)
在javascript中,有一种叫做max safe integer
的东西,如您所见,它上面的整数的计算很奇怪