【问题标题】:parseInt behaviour in Javascript [duplicate]Javascript中的parseInt行为[重复]
【发布时间】:2015-11-25 07:43:41
【问题描述】:

我打开终端浏览器(例如 Chrome)。

我写这个:

var y = "11000011010101011";

“11000011010101011”

parseInt(y)

11000011010101012

我期待11000011010101011,但它返回给我11000011010101012

有人知道为什么吗?

【问题讨论】:

标签: javascript parsing


【解决方案1】:

Javascript 中的每个数字都表示为double precision floating point。 JavaScript 只能准确表示最大为 9007199254740991 (2^53 - 1) 的整数。一旦超过该限制,您将失去精度。

【讨论】:

【解决方案2】:

根据this页面。

Javascript 中的所有数字都是 64 位浮点数,整数用 53 位尾数表示。 因此,您无法存储大于 2^53 -1 且小于 -2^53 +1 的整数而不会丢失精度(Javascript 会将您的数字四舍五入以便能够存储它)。

您的数字大于 2^53 -1。即使一个字符串可以存储它,为了将它存储在一个“数字”变量中,它必须被四舍五入,失去精度并返回一个稍微不同的数字。

【讨论】:

    【解决方案3】:

    只有9007199254740991 是javascript 中的安全整数。 这种情况类似于

    9007199254740992 + 1 // 9007199254740992
    9007199254740993 + 1 // 9007199254740992
    9007199254740994 + 1 //9007199254740996
    

    更多详情请查看链接
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number http://www.2ality.com/2012/04/number-encoding.html

    也看到这个
    how addition of Number works on max limit numbers?
    这是重复的问题,请参阅原文

    【讨论】:

      猜你喜欢
      • 2012-09-24
      • 2018-03-11
      • 2023-03-04
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2020-09-12
      • 2012-03-20
      • 2013-10-02
      相关资源
      最近更新 更多