【问题标题】:Why does parseInt("014") come out to 12? [duplicate]为什么 parseInt("014") 出来是 12? [复制]
【发布时间】:2011-11-12 22:08:24
【问题描述】:

可能重复:
Workarounds for JavaScript parseInt octal bug

似乎在解析 Int 时应该忽略前导零。这背后的原理是什么?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    解析为八进制数,你也需要指定base

    parseInt("014", 10)   // 14
    

    引用:

    • 如果输入字符串以“0x”或“0X”开头,则基数为16 (十六进制)。

    • 如果输入字符串以“0”开头,则基数为八(八进制)。这 功能是非标准的,有些实现故意不 支持它(而不是使用基数 10)。为此,总是 使用 parseInt 时指定基数。

    • 如果输入字符串以任何其他值开头,则基数为 10 (十进制)。


    【讨论】:

      【解决方案2】:

      因为它被解析为八进制数,而不是十进制数。 来自MDC

      • 如果输入字符串以“0x”或“0X”开头,基数为16 (十六进制)。
      • 如果输入字符串以“0”开头,则基数为八 (八进制)。这个特性是非标准的,一些实现 故意不支持它(而是使用基数 10)。为了 这个原因在使用 parseInt 时总是指定一个基数。
      • 如果输入 字符串以任何其他值开头,基数为 10(十进制)。

      要强制它解析为十进制,只需提供 10 作为您的第二个参数(基数)。

      var i = parseInt(012,10);
      

      【讨论】:

      【解决方案3】:

      前导零使数字变为八进制

      【讨论】:

        【解决方案4】:

        八进制数

        8 + 4 == 12

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-31
          • 2014-06-06
          • 1970-01-01
          • 2012-02-04
          • 1970-01-01
          • 2011-09-18
          • 2011-10-17
          • 2014-02-11
          相关资源
          最近更新 更多