2009-09-29 66 views
3

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

例如

'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函数(),并有这样的疑问。

+0

啊。我想我明白。 “temp1”是一个声明为base8的数字。 parseInt对此无能为力,因为它是一个数字。 0300 == 192。但是,temp2是一个字符串,因为您已经强制它将其解析为base10,所以前导0将被忽略。 – Glenn 2009-09-29 08:02:40

+0

你的问题不再有意义。请更新它 - 就像现在一样;对任何人都没有用。 – roosteronacid 2009-09-29 08:14:14

回答

6

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

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

注意:您应该始终提供可选的基数参数,因为parseInt函数将尝试通过自己看着办吧,如果不是,只要它。这可能会导致一些非常奇怪的行为。


更新:

这是一个黑客攻击的一位。但尝试使用String对象:

var s = "0300"; 

parseInt(s, 10); // 300 

这个黑客的下侧是,你需要指定一个字符串变量。下面的例子都将无法工作:

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

我宁愿说:你*需要*来指定基数。 – Gumbo 2009-09-29 07:43:11

+0

@Gumbo - 除了当然不是这样; P你*应该*指定基数。 – annakata 2009-09-29 07:55:51

+0

@Gumbo&annakata:你说得对。如果你不用基数解析,函数会自行解析出来。这可能会导致一些非常奇怪的行为。 – roosteronacid 2009-09-29 08:21:39

2

您可以提供的基数参数parseInt()

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

在这种情况下需要注意radix参数,它的结果可能是意外的:parseInt('0x300',16); => 768 parseInt('0x300',8); => 0 – Anatoliy 2009-09-29 08:18:04

2

如果你想保持它作为一个字符串,你可以使用正则表达式:

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

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

+0

谢谢。 我已经知道你在说什么,是什么令我困惑如下: var temp1 = 0300; var temp2 ='0300'; parseInt(temp1,10)= 192; parseInt(temp1,10)= 300; 所以我怀疑parseInt()并有这个问题。 – 2009-09-29 07:54:35

0
Number("0300") = Number(0300) = 300 
+0

号码(0300)= 192 – Anax 2009-09-29 08:15:45

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 
+0

这不适用于0030. – Anax 2009-09-29 08:28:31

+0

Ops。这现在已经修复。 – Anatoliy 2009-09-29 08:53:38