我有这样的数据:
var currentValue="12345678901234561";
我正在尝试解析它:
var number = parseInt(currentValue, 10) || 0;
我的结果是:
number = 12345678901234560
现在让我们试试:
currentValue="12345678901234567"
在这种情况下,parseInt(currentValue,10
) 将导致 12345678901234568
谁能解释一下为什么 parseInt 从我提供的值中加/减 1?
Can anyone explain me why parseInt is adding/substracting 1 from values provided by me?
不完全是,但是 JavaScript 数字是 IEEE-754 double-precision binary floating point (即使您使用的是 parseInt
),其精度也只有大约 15 位。您的号码是 17 位长,因此精度会受到影响,并且最低位的数字变得松软。
最大可靠整数值为 9,007,199,254,740,991,可从属性 Number.MAX_SAFE_INTEGER
获得。在现代 JavaScript 引擎上。 (同样,还有 Number.MIN_SAFE_INTEGER
,即 -9,007,199,254,740,991。)
一些特定于整数的操作,例如按位运算符 ~
, &
, 和 |
, 将它们的 float 操作数转换为带符号的 32 位整数,这给了我们一个更小的范围:-231 (-2,147,483,648) 到 231-1 ( 2,147,483,647)。其他的,比如 <<
, >>
, 和 >>>
,将其转换为 unsigned 32 位整数,范围为 0 到 4,294,967,295。最后,为了完善我们的整数讨论,length
数组的 of 始终是无符号 32 位整数范围内的数字。