【问题标题】:parseInt returning values that differs by 1 [duplicate]parseInt 返回的值相差 1 [重复]
【发布时间】:2016-01-18 16:06:25
【问题描述】:

我有这样的数据:

var currentValue="12345678901234561";

我正在尝试解析它:

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

我的结果是:

number = 12345678901234560

现在让我们试试:

currentValue="12345678901234567"

在这种情况下parseInt(currentValue,10) 将导致12345678901234568

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    谁能解释一下为什么 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) 到 231-1 (2,147,483,647)。其他人,如<<>>>>>,将其转换为 无符号 32 位整数,范围为 0 到 4,294,967,295。最后,为了完善我们的整数讨论,数组的length 始终是无符号 32 位整数范围内的数字。

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 2012-07-13
      • 2018-10-01
      • 2023-01-26
      • 2012-02-04
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多