javascript parseInt错误转换

时间:2012-09-14 09:55:10

标签: javascript google-chrome substring parseint

  

可能重复:
  How to parseInt a string with leading 0

我正在使用Google Chrome版。 21.0.1180.89

我执行:

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

输出正确:“07 - > 7”确定

我执行:

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

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

为什么?

5 个答案:

答案 0 :(得分:2)

字符串以“0”作为八进制开头。您必须在parseInt()

中设置基数10

试试这个,

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

答案 1 :(得分:0)

添加基数(基数):parseInt(a.substring(0,2), 10)。发生了什么事情是你的js引擎试图猜测字符串是什么基础,并且猜错了,所以你需要告诉引擎使用哪个基数(2表示二进制,8表示八进制{{ 1}}表示十进制,10表示十六进制等)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

parseInt取2个参数,string解析,radix是optionnal(但需要JSHint / JSLint)。 如果你没有传递{radix {参数,parseInt将“选择”最适合你传递的字符串,那么对于08字符串,它将采用八进制基数而不是十进制基数(你想要的那个)。

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

来源:MDN

答案 4 :(得分:0)

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

var clock = '07:30';
var time = {
  hours: +clock.split(':')[0],
  minutes: +clock.split(':')[1]
}