如何解析带有前导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 中的日期和月份值中删除前导零?