86 votes

ajouter des virgules à un nombre en jQuery

J'ai ces chiffres

10999 et 8094 et 456

Et tout ce que je veux faire, c'est ajouter une virgule au bon endroit si nécessaire pour que ça ressemble à ceci

10,999 et 8,094 et 456

Tout cela se trouve dans une balise p, comme ceci <p class="points">10999</p> etc.

Est-ce que c'est possible ?

J'ai tenté de le faire ici avec l'aide d'autres postes. http://jsfiddle.net/pdWTU/1/ mais je n'arrive pas à le faire fonctionner.

Merci

Jamie

UPDATE

Je me suis un peu amusé et j'ai réussi à trouver une solution ici. http://jsfiddle.net/W5jwY/1/

Je vais regarder le nouveau plugin Globalization pour trouver une meilleure façon de le faire.

Merci

Jamie

4 votes

Question connexe ici : stackoverflow.com/questions/2901102/

3 votes

+1 pour votre bricolage. Vous devriez inclure votre solution dans votre mise à jour : <number string>.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

2 votes

J'aimerais pouvoir +100 pour votre solution : Regex disant Pas de limite de mot suivi d'un regard positif devant 3 chiffres éventuellement répétés non suivis d'un chiffre. Génial !

144voto

Timothy Perez Points 6379

Fonctionne sur tous les navigateurs, c'est tout ce dont vous avez besoin.

  function commaSeparateNumber(val){
    while (/(\d+)(\d{3})/.test(val.toString())){
      val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
    }
    return val;
  }

J'ai écrit ce texte pour qu'il soit compact et précis, grâce aux regex. C'est du JS pur, mais vous pouvez l'utiliser dans votre jQuery comme ça :

$('#elementID').html(commaSeparateNumber(1234567890));

ou

$('#inputID').val(commaSeparateNumber(1234567890));

Toutefois, si vous souhaitez quelque chose de plus propre, avec de la flexibilité. Le code ci-dessous fixera correctement les décimales, supprimera les zéros en tête, et peut être utilisé sans limite. Merci à @baacke dans les commentaires.

  function commaSeparateNumber(val){
   val = val.toString().replace(/,/g, ''); //remove existing commas first
   var valRZ = val.replace(/^0+/, ''); //remove leading zeros, optional
   var valSplit = valRZ.split('.'); //then separate decimals

   while (/(\d+)(\d{3})/.test(valSplit[0].toString())){
    valSplit[0] = valSplit[0].toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
   }

   if(valSplit.length == 2){ //if there were decimals
    val = valSplit[0] + "." + valSplit[1]; //add decimals back
   }else{
    val = valSplit[0]; }

   return val;
  }

Et dans votre jQuery, utilisez comme ceci :

$('.your-element').each(function(){
  $(this).html(commaSeparateNumber($(this).html()));
});

Voici le jsFiddle .

4 votes

La réponse de l'utilisateur1655655 est bien meilleure

7 votes

Deux problèmes avec cette réponse : 1. Si vous appelez la fonction plusieurs fois avec la même valeur, vous obtiendrez des virgules aux mauvais endroits (par exemple, les événements keyup). 2. Cette fonction ne gère pas correctement les décimales et ajoutera des virgules à l'intérieur des décimales. Voir ce qui suit JSFiddle pour une version modifiée qui corrige les deux.

1 votes

@baacke L'idée de cette fonction est d'être mince, donc je n'ai pas pris en compte le fait de l'appeler deux fois sur une même var ou des décimales (puisque ce n'était pas dans la question). De toute façon, votre exemple de bidouille est utile pour les cas où vous auriez besoin d'une décimale donc merci.

134voto

vladimir.shein Points 369
Number(10000).toLocaleString('en');  // "10,000"

6 votes

C'est la solution la plus simple et elle fonctionne parfaitement pour moi. Je vous remercie !

3 votes

Merci pour cette astuce, bien mieux que d'écrire des fonctions personnalisées ou d'inclure un plugin. pour moi la réponse #1 !

5 votes

C'est génial, et cela fonctionne dans la plupart des navigateurs de bureau, mais attention à son support limité dans les navigateurs mobiles pour le moment... developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/

1voto

Jakub Konecki Points 28852

Jetez un coup d'œil à la publication récente Plugin de globalisation à jQuery par Microsoft

1voto

Sumith Harshan Points 1395
    function delimitNumbers(str) {
      return (str + "").replace(/\b(\d+)((\.\d+)*)\b/g, function(a, b, c) {
        return (b.charAt(0) > 0 && !(c || ".").lastIndexOf(".") ? b.replace(/(\d)(?=(\d{3})+$)/g, "$1,") : b) + c;
      });
    }

    alert(delimitNumbers(1234567890));

0voto

Deniz Dogan Points 8848

Je suppose que vous faites une sorte de localisation, alors jetez un coup d'oeil à ce script .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X