1

可能重复:
如何解析带有前导 0 的字符串

我正在使用谷歌浏览器版本。21.0.1180.89

我执行:

var a="07:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));

输出正确:"07 --> 7" OK

我执行:

var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));

输出是正确的:“08 --> 0”错误

为什么?

4

5 回答 5

2

字符串以八进制的“0”开头。您必须将基数 10 设置为parseInt()

尝试这个,

var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2), 10));​
于 2012-09-14T09:57:20.887 回答
0

添加一个基数(基数)parseInt(a.substring(0,2), 10):。发生的事情是您的 js 引擎试图猜测字符串的基数,并且猜测错误,因此您需要告诉引擎使用什么基数(2对于二进制,对于十进制的八进制,8对于十六进制等)1016

于 2012-09-14T09:56:20.160 回答
0

你必须使用 parseInt(a.substring(0,2),10);

于 2012-09-14T09:59:56.477 回答
0

parseInt带 2 个参数,string解析的和radix可选的(但 JSHint/JSLint 需要)。如果您不传递 {radix{ 参数,parseInt将为您传递的字符串“选择”最佳值,因此对于08字符串,它将采用八进制基数而不是十进制基数(您想要的那个)。

TL;DR使用时始终设置基数parseInt

来源:MDN

于 2012-09-14T10:00:47.457 回答
0

如果您正在处理时间只是为了提供不同的解决方案,您可以尝试这样做:

var clock = '07:30';
var time = {
  hours: +clock.split(':')[0],
  minutes: +clock.split(':')[1]
}
于 2012-09-14T10:04:13.630 回答