2009-09-29 96 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