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

时间:2018-09-08 18:44:17

标签: javascript

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

2 个答案:

答案 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的东西,如您所见,它上面的整数的计算很奇怪

在此处详细了解 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER