如何解析带有前导0的字符串

Posted

技术标签:

【中文标题】如何解析带有前导0的字符串【英文标题】:How to parseInt a string with leading 0 【发布时间】:2010-12-05 10:25:44 【问题描述】:

如何将Int "09" 解析成9?

【问题讨论】:

【参考方案1】:

包括基数:

parseInt("09", 10);

【讨论】:

【参考方案2】:
parseInt("09", 10);

parseInt(parseFloat("09"));

【讨论】:

【参考方案3】:
parseInt("09",10);

在这里返回 9。

这很奇怪。

alert(parseInt("09")); // shows 9. (tested with Opera 10)

【讨论】:

@JonH:对。感谢您的警告。因为他写的是字符串而不是字符串,所以我弄错了。 取决于浏览器和版本 parseInt("09") 可以返回 0。这是一个错误。 @JonH: 你能检查一下吗:w3schools.com/jsref/jsref_parseInt.asp document.write(parseInt("010") 这里也显示 10。 @JonH:这实际上不是一个错误。 ECMAScript 允许实现将带有前导零的数字视为八进制。有些实现可以,有些不可以。 @MatthewCrumley — 一条旧评论,但到底是什么 - ES5 删除了该行为,因此兼容的浏览器应该parseInt('08') 视为 base 10。【参考方案4】:

你也可以这样做:

Number('09') => 9

这会在 IE7、IE8、FF3、FF4 和 Chrome 10 上返回整数 9。

【讨论】:

【参考方案5】:

这让我发疯了 -parseInt("02") 有效,但 parseInt("09") 无效。

正如其他人所说,解决方案是指定基数 10:

parseInt("09", 10);

这种行为有一个很好的解释here

... 以 javascript 数字开头 零被认为是八进制和 八进制中没有 08 或 09,因此 问题。

【讨论】:

【参考方案6】:

重新实现现有的 parseInt,这样如果用一个参数调用它,那么“10”会自动包含在第二个参数中。

(function()
  var oldParseInt = parseInt;
  parseInt = function()
    if(arguments.length == 1)
    
      return oldParseInt(arguments[0], 10);    
    
    else
    
      return oldParseInt.apply(this, arguments);
    
  
)();

【讨论】:

以上是关于如何解析带有前导0的字符串的主要内容,如果未能解决你的问题,请参考以下文章

Excel:如何像数据透视表一样对一系列带有前导零的数字进行排序?

如何将带有前导零的数字字符串转储为 yaml-cpp 中的有效 yaml 字符串?

在 Rust 中将二进制字符串转换为带有前导零的十六进制字符串

使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?

如何在 JavaScript 中输出带有前导零的数字? [复制]

格式化带前导符号的数字