add commas to a number in jQuery

JavascriptJqueryFormattingNumbers

Javascript Problem Overview


I have these numbers

10999 and 8094 and 456

And all i want to do is add a comma in the right place if it needs it so it looks like this

10,999 and 8,094 and 456

These are all within a p tag like this <p class="points">10999</p> etc.

Can it be done?

I've attempted it here with the help of other posts http://jsfiddle.net/pdWTU/1/ but can't seem to get it to work

Thanks

Jamie

UPDATE

Messed around a bit and managed to figure it out here http://jsfiddle.net/W5jwY/1/

Going to look at the new Globalization plugin for a better way of doing it

Thanks

Jamie

Javascript Solutions


Solution 1 - Javascript

Works on all browsers, this is all you need.

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

Wrote this to be compact, and to the point, thanks to regex. This is straight JS, but you can use it in your jQuery like so:

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

or

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

However, if you require something cleaner, with flexibility. The below code will fix decimals correctly, remove leading zeros, and can be used limitlessly. Thanks to @baacke in the comments.

  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;
  }

And in your jQuery, use like so:

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

Here's the jsFiddle.

Solution 2 - Javascript

Number(10000).toLocaleString('en');  // "10,000"

Solution 3 - Javascript

Timothy Pirez answer was very correct but if you need to replace the numbers with commas Immediately as user types in textfield, u might want to use the Keyup function.

      $('#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>

Solution 4 - Javascript

Take a look at recently released Globalization plugin to jQuery by Microsoft

Solution 5 - Javascript

Take a look at Numeral.js. It can format numbers, currency, percentages and has support for localization.

Solution 6 - Javascript

    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));

Solution 7 - Javascript

I'm guessing that you're doing some sort of localization, so have a look at this script.

Solution 8 - Javascript

Using toLocaleString ref at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

function formatComma(value, sep = 0) {
      return Number(value).toLocaleString("ja-JP", { style: "currency", currency: "JPY", minimumFractionDigits: sep });
    }
console.log(formatComma(123456789, 2)); // ¥123,456,789.00
console.log(formatComma(123456789, 0)); // ¥123,456,789
console.log(formatComma(1234, 0)); // ¥1,234

Solution 9 - Javascript

another approach:

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);

Another amazing plugin: http://www.teamdf.com/web/jquery-number-format/178/

Solution 10 - Javascript

Another way to do it:

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));

Solution 11 - Javascript

Here is my coffeescript version of @baacke's fiddle provided in a comment to @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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJamie TaylorView Question on Stackoverflow
Solution 1 - JavascriptTimothy PerezView Answer on Stackoverflow
Solution 2 - JavascriptsonnenhaftView Answer on Stackoverflow
Solution 3 - JavascriptTosin OnikuteView Answer on Stackoverflow
Solution 4 - JavascriptJakub KoneckiView Answer on Stackoverflow
Solution 5 - JavascriptadamwdraperView Answer on Stackoverflow
Solution 6 - JavascriptSumith HarshanView Answer on Stackoverflow
Solution 7 - JavascriptDeniz DoganView Answer on Stackoverflow
Solution 8 - JavascriptTính Ngô QuangView Answer on Stackoverflow
Solution 9 - JavascriptabhiklpmView Answer on Stackoverflow
Solution 10 - JavascriptGeorgeView Answer on Stackoverflow
Solution 11 - JavascriptpymarcoView Answer on Stackoverflow