2009-02-27 5 views
33

J'ai une zone de texte en Javascript. Lorsque j'entre '0000.00' dans la zone de texte, je veux savoir comment le convertir en un seul zéro, tel que '0.00'.Tronquer les zéros d'une chaîne en Javascript

+0

besoin de clarifier ce qu'est une « chaîne » est. Si votre "chaîne" est un nombre décimal, alors la réponse sera différente que si votre "chaîne" est une chaîne de texte. "00000.000" -> "0.000" serait une conversion décimale. "000TXT10001" -> "0TXT10001" nécessiterait une fonction de rognage. Par exemple, qu'attendez-vous lorsque l'entrée est "0011.1100" -> "011.1100" ou "11.11"? – ChronoFish

Répondre

1

Essayez ceci:

<input type="text" onblur="this.value=this.value.replace(/^0+(?=\d\.)/, '')"> 
13
var value= document.getElementById("theTextBoxInQuestion").value; 
var number= parseFloat(value).toFixed(2); 
+4

Est-ce que cela cause des problèmes si le nombre de zéros à gauche de la décimale est très grand? – Eric

+0

Eric a un point, ça ne marchera que si vous avez un zéro. Pas plus que cela et échouer. –

8

On dirait que vous voulez juste supprimer des zéros en tête à moins qu'il n'y a qu'une seule gauche (« 0 » pour un entier ou « 0.xxx » pour un flotteur, où x peut être n'importe quoi).

Cela devrait être bon pour une première coupe:

while (s.charAt(0) == '0') {   # Assume we remove all leading zeros 
    if (s.length == 1) { break };  # But not final one. 
    if (s.charAt(1) == '.') { break }; # Nor one followed by '.' 
    s = s.substr(1, s.length-1) 
} 
+0

C'est une bonne solution. S'appuyer sur des fonctions intégrées n'est pas toujours la meilleure option. Je transformerais ceci en une fonction d'aide qui prend un argument de chaîne et retourne la chaîne mise en forme. –

+0

Fonctionne très bien pour moi. Je conseillerais juste d'ajouter un morceau de code pour soutenir les nombres négatifs (avec "-" dans le premier caractère). – Gaston

43

solution simplifiée est comme ci-dessous. Regarde ça!

var resultString = document.getElementById("theTextBoxInQuestion") 
          .value 
          .replace(/^[0]+/g,""); 
+9

Parfait? Euh ... ça ne marche pas: '' 0000.00 '' devient '' .00'' – MikeM

+0

@MikeM, alors vous pouvez utiliser 'replace (/^[0] +/g," 0 ")' – Andrew

5

Vous pouvez utiliser ce code:

<script language="JavaScript" type="text/javascript"> 
<!-- 
function trimNumber(s) { 
    while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); } 
    return s; 
} 

var s1 = '00123'; 
var s2 = '000assa'; 
var s3 = 'assa34300'; 
var s4 = 'ssa'; 
var s5 = '121212000'; 

alert(s1 + '=' + trimNumber(s1)); 
alert(s2 + '=' + trimNumber(s2)); 
alert(s3 + '=' + trimNumber(s3)); 
alert(s4 + '=' + trimNumber(s4)); 
alert(s5 + '=' + trimNumber(s5)); 
// end hiding contents --> 
</script> 
22
str.replace(/^0+(?!\.|$)/, '') 

    '0000.00' --> '0.00' 
    '0.00' --> '0.00' 
    '00123.0' --> '123.0' 
     '0' --> '0' 
4

Ok une solution simple. Le seul problème est quand la chaîne est "0000.00" résultat dans la plaine 0. Mais à côté de cela, je pense que c'est une solution cool.

var i = "0000.12"; 
var integer = i*1; //here's is the trick... 
console.log(i); //0000.12 
console.log(integer);//0.12 

Pour certains cas, je pense que cela peut fonctionner ...

Questions connexes