2010-10-07 711 views
79

Je ces chiffresajouter des virgules à un certain nombre dans jQuery

10999 et 8094 et 456

Et tout ce que je veux faire est d'ajouter une virgule au bon endroit si elle en a besoin il ressemble à ceci

10,999 et 8,094 et 456

ce sont tous tag ap comme celui-ci <p class="points">10999</p> etc.

Cela peut-il être fait?

Je l'ai essayé ici avec l'aide d'autres postes http://jsfiddle.net/pdWTU/1/ mais ne peut pas sembler le faire fonctionner

Merci

Jamie

MISE À JOUR

autour Foiré un peu et réussi à comprendre ici http://jsfiddle.net/W5jwY/1/

Aller à regarder le nouveau plugin mondialisation pour une meilleure façon de le faire

Merci

Jamie

+4

question connexe ici: http://stackoverflow.com/questions/2901102/how-to-print-number-with-commas-as-thousands-separators-in-javascript – epascarello

+3

+ 1 pour votre violon. Vous devriez inclure votre solution dans votre mise à jour: '' ' .réplace (/ \ B (? = (?: \ D {3}) + (?! \ D))/g, ',')' '' – zhon

+2

Je souhaite que je puisse +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. Impressionnant! – zhon

Répondre

131

fonctionne sur tous les navigateurs, cela est tout ce que vous avez besoin. Ecrit cela pour être compact, et au point, grâce à regex. Ceci est JS droit, mais vous pouvez l'utiliser dans votre jQuery comme ceci:

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

ou

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

La réponse de user1655655 est bien meilleure – Pyrolistical

+9

J'aime les tortues! –

+5

Deux problèmes avec cette réponse: 1. Si vous appelez la fonction plus d'une fois avec la même valeur, les virgules seront placées aux mauvais endroits (par exemple, les événements de manipulation). 2. Cette fonction ne gère pas les décimales correctement et ajoutera des virgules à l'intérieur des décimales. Voir ce [JSFiddle] (http://jsfiddle.net/baacke/XL5dn/) pour une version modifiée qui corrige les deux. – baacke

0

Je devine que vous faites une sorte de localisation, donc un coup d'oeil à this script .

0

Jetez un oeil à Numeral.js. Il peut formater des nombres, des devises, des pourcentages et prend en charge la localisation.

1
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)); 
121
Number(10000).toLocaleString('en'); // "10,000" 
+5

Cette solution est la plus simple et fonctionne parfaitement pour moi. Je vous remercie! – ahgood

+3

merci pour cet indice, bien mieux que d'écrire des fonctions personnalisées ou d'inclure un plugin. pour moi, répondez # 1! – linqu

+5

C'est génial, et fonctionne dans la plupart des navigateurs de bureau, mais méfiez-vous du soutien limité dans les navigateurs mobiles en ce moment ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString # Browser_Compatibility – Luke

2

réponse Timothy Pírez était très correct, mais si vous avez besoin de remplacer les numéros par des virgules immédiatement les types d'utilisateurs dans textfield, u peut vouloir utiliser la fonction keyUp.

 $('#textfield').live('keyup', function (event) { 
     var value=$('#textfield').val(); 

     if(event.which >= 37 && event.which <= 40){ 
      event.preventDefault(); 
     } 
     var newvalue=value.replace(/,/g, ''); 
     var valuewithcomma=Number(newvalue).toLocaleString('en'); 
     $('#textfield').val(valuewithcomma); 

     }); 

    <form><input type="text" id="textfield" ></form> 
+0

Cela fonctionne aussi pour 'coller'. –

-1

une autre approche:

function addCommas(nStr) 
{ 
    nStr += ''; 
    x = nStr.split('.'); 
    x1 = x[0]; 
    x2 = x.length > 1 ? '.' + x[1] : ''; 
    var rgx = /(\d+)(\d{3})/; 
    while (rgx.test(x1)) { 
     x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
    } 
    return x1 + x2; 
} 
var a = addCommas(10000.00); 
alert(a); 

Un autre plug-in étonnant: http://www.teamdf.com/web/jquery-number-format/178/

0

Une autre façon de le faire:

function addCommas(n){ 
    var s = "", 
     r; 

    while (n) { 
    r = n % 1000; 
    s = r + s; 
    n = (n - r)/1000; 
    s = (n ? "," : "") + s; 
    } 

    return s; 
} 

alert(addCommas(12345678)); 
-1

Voici ma version coffeescript de @ Baacke de violon fourni dans un comm ent à @Timothy Perez

class Helpers 
    @intComma: (number) -> 
     # remove any existing commas 
     comma = /,/g 
     val = number.toString().replace comma, '' 

     # separate the decimals 
     valSplit = val.split '.' 

     integer = valSplit[0].toString() 
     expression = /(\d+)(\d{3})/ 
     while expression.test(integer) 
      withComma = "$1,$2" 
      integer = integer.toString().replace expression, withComma 

     # recombine with decimals if any 
     val = integer 
     if valSplit.length == 2 
      val = "#{val}.#{valSplit[1]}" 

     return val 
+0

S'il vous plaît expliquer la downvote. – pymarco