我有这样的数据:
var currentValue="12345678901234561";
我试图解析它:
var number = parseInt(currentValue, 10) || 0;
我的结果是:
number = 12345678901234560
现在让我们试试:
currentValue="12345678901234567"
在这种情况下parseInt(currentValue,10
)会产生12345678901234568
有人能解释一下为什么parseInt从我提供的值中添加/减少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位整数范围内的数字。