parseInt返回的值相差1

时间:2015-10-20 06:06:19

标签: javascript

我有这样的数据:

var currentValue="12345678901234561";

我试图解析它:

var number = parseInt(currentValue, 10) || 0;

我的结果是:

number = 12345678901234560

现在让我们试试:

currentValue="12345678901234567"

在这种情况下parseInt(currentValue,10)会产生12345678901234568

有人能解释一下为什么parseInt从我提供的值中添加/减少1?

1 个答案:

答案 0 :(得分:8)

  

有人能解释一下为什么parseInt从我提供的值中添加/减少1?

事实并非如此,但JavaScript编号是IEEE-754 double-precision binary floating point(即使您正在使用parseInt),其精度只有大约15位数。您的号码长度 17 ,因此精确度会受到影响,而最低位数字会变得有吸引力。

最大可靠整数值是9,007,199,254,740,991,可从现代JavaScript引擎上的属性Number.MAX_SAFE_INTEGER获得。 (同样地,有Number.MIN_SAFE_INTEGER,即-9,007,199,254,740,991。)

一些特定于整数的操作,如按位运算符~&|,将它们的浮点数操作数转换为带符号的32位整数,这给了我们一个更小的范围:-2 31 ( - 2,147,483,648)至2 31 -1(2,147,483,647)。其他人,例如<<>>>>>,将其转换为无符号 32位整数,给出范围0到4,294,967,295。最后,为了完善我们的整数讨论,数组的length始终是无符号32位整数范围内的数字。