2009-09-29 11 views
3

J'ai hava une chaîne de temps, le format est HHMM, je dois obtenir la décimale, comment puis-je faire?JavaScript à découper commencé 0 dans une chaîne

par exemple.

'1221' = 1221

'0101' = 101

'0011' = 11

'0001' = 1

Si la chaîne commence par "0x", le radix est 16 (hexadécimal)

Si la chaîne commence par "0", la base est 8 (octal).

Mais je veux traiter comme décimales, peu importe que ce soit a commencé avec 0 ou 00 ou 000.


supplémentaires:

remercie tous.

Je sais ce que vous avait dit, ce qui fait je confondais comme suit:

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

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

donc je doute parseInt() et ai cette question.

+0

Ahh. Je pense que je comprends. "temp1" est un nombre déclaré comme base8. parseInt ne fait rien parce que c'est un nombre. 0300 == 192. Cependant, temp2 est une chaîne et le 0 principal est ignoré parce que vous l'avez forcé à analyser en tant que base10. – Glenn

+0

Votre question n'a plus de sens. Veuillez le mettre à jour - tel qu'il est maintenant; ça ne sert à personne. – roosteronacid

Répondre

6

Utilisez parseInt() et spécifiez vous-même la base.

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

Note: Vous devez toujours fournir le paramètre radix en option, puisque parseInt va essayer de comprendre par lui-même, si elle est pas fourni. Cela peut conduire à un comportement très étrange.


Mise à jour:

C'est un peu un hack. Mais essayez d'utiliser un objet String:

var s = "0300"; 

parseInt(s, 10); // 300 

L'inconvénient de ce hack est que vous devez spécifier une chaîne variable. Aucun des exemples suivants fonctionnera:

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

Je dirais plutôt: Vous * devez * spécifier la base. – Gumbo

+0

@Gumbo - sauf bien sûr que ce n'est pas vrai; P Vous * devez * spécifier la base. – annakata

+0

@Gumbo & annakata: Vous avez raison. Si vous n'analysez pas dans la base, la fonction essaie de le comprendre par elle-même. Ce qui peut provoquer un comportement très étrange. – roosteronacid

2

Vous pouvez fournir le paramètre radix à parseInt():

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

Dans ce cas doivent être prudent avec le paramètre radix, ses résultats peuvent être inattendus: parseInt ('0x300', 16); => 768 parseInt ('0x300', 8); => 0 – Anatoliy

2

Si vous voulez le garder comme une chaîne, vous pouvez utiliser regex:

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

Si vous voulez le transformer en un numéro, l'acide de roosteron a le bon code.

+0

merci. Je savais ce que vous avez dit, ce qui rend confus comme suit: var temp1 = 0300; var temp2 = '0300'; parseInt (temp1,10) = 192; parseInt (temp1,10) = 300; donc je doute parseInt() et ai cette question. –

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

Numéro (0300) = 192 – Anax

0

Solution ici:

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

Cela ne fonctionnera pas avec 0030. – Anax

+0

Ops. Ceci est corrigé maintenant. – Anatoliy

Questions connexes