要修剪的JavaScript在字符串中开始为0

时间:2009-09-29 07:33:43

标签: javascript

我有一个时间字符串,格式是HHMM,我需要得到它的小数,我该怎么办?

e.g。

'1221'= 1221

'0101'= 101

'0011'= 11

'0001'= 1

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

如果字符串以“0”开头,则基数为8(八进制)。

但无论是从0还是00或000开始,我都希望将其视为小数。


附加:

谢谢大家。

我知道你说了什么,让我感到困惑的是:

var temp1 = 0300; var temp2 ='0300';

parseInt函数(temp1,10)= 192; parseInt函数(temp1,10)= 300;

所以我怀疑是parseInt()并且有这个问题。

5 个答案:

答案 0 :(得分:6)

使用parseInt()并自行指定基数。

parseInt("10")     // 10
parseInt("10", 10) // 10
parseInt("010")    //  8
parseInt("10", 8)  //  8
parseInt("0x10")   // 16
parseInt("10", 16) // 16

注意:您应该始终提供可选的radix参数,因为如果没有提供,parseInt将尝试自己解决它。这可能会导致一些非常奇怪的行为。


更新

这有点像黑客。但请尝试使用String对象:

var s = "0300";

parseInt(s, 10); // 300

这个hack的缺点是你需要指定一个字符串变量。以下示例都不起作用:

parseInt(0300 + "", 10);              // 192    
parseInt(0300.toString(), 10);        // 192    
parseInt(Number(0300).toString(), 10) // 192

答案 1 :(得分:2)

您可以将基数参数提供给parseInt()

var x = '0123';
x = parseInt(x, 10); // x == 123

答案 2 :(得分:2)

如果要将其保留为字符串,可以使用正则表达式:

num = num.replace(/^0*/, "");

如果你想把它变成一个数字,roosteronacid有正确的代码。

答案 3 :(得分:0)

Number("0300") = Number(0300) = 300

答案 4 :(得分:0)

此处的解决方案:

function parse_int(num) {
    var radix = 10;
    if (num.charAt(0) === '0') {
        switch (num.charAt(1)) {
        case 'x':
            radix = 16;
            break;
        case '0':
            radix = 10;
            break;
        default:
            radix = 8;
            break;
    }
    return parseInt(num, radix);
}
var num8 = '0300';
var num16 = '0x300';
var num10 = '300';
parse_int(num8);  // 192
parse_int(num16); // 768
parse_int(num10); // 300