addCommas (v9)

Revision 9 of this benchmark created by Scott Sauyet on


Description

addCommas is a simple script to add commas at every 3 digits from the right.

'Theirs' comes from mredkj.com, variations of which I have seen all over.

Setup

var addCommas1 = function(n) {
     var s = n.toFixed(2).replace('.00', '');
     var digits = (Math.floor(n) + '').length;
     for (var i = 0, j = 0, mod = digits % 3; i < digits; i++) {
      if (i == 0 || i % 3 != mod) {
       continue;
      }
      s = s.substr(0, i + j) + ',' + s.substr(i + j);
      j++;
     }
     return s;
    };
    
    var addCommas2 = function(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 addCommas3 = function(str) {
      str=String(str);
      var dot=str.search("\\.");
      var s=(dot!=-1?str.slice(0,dot):str),r="",last=(dot!=-1?str.slice(dot):"");
      for (var i=s.length-1,j=1; i>-1; i--, j++) {
         r=s.charAt(i)+r;
         if (j%3==0&&i!=0) r=","+r;
      }
      return r+last;
    }
    
    var addCommas4 = (function () {
        var rx = /(-?\d+)(\d{3})/;
        return function (v) {
            v += "";
            while (rx.test(v)) {
                v = v.replace(rx, '$1,$2');
            }
            return v;
        };
    }());
    
    var addCommas5 = (function () {
        var rx = /.{3}/g;
        return function (v) {
            var a = (v + "").split("."), s = a[0], u = a[1] ? "." + a[1] : "", 
                l = s.length, m = l%3, p = m ? s.substr(0, m) : "";
        if (m) {
                s = s.substr(m);
                a = s.match(rx);
                a.unshift(p);
                return a.join(",") + u;
        }
        return s.match(rx).join(",") + u;
        };
    }());
    
    
    
    var addCommas6 = (function () {
        return function (str) {
          var dot, s, r = "", last, i, j, l;
          str += "";
          dot = str.indexOf(".");
          s = dot > -1 ? (last = str.slice(dot), str.slice(0, dot)) : (last = "", str);
          l = s.length;
          while (l > 0) {
                l -= 3;
                if (l > 0) {
                        r = s.substr(l) + r;
                        r = "," + r;
                        s = s.substr(0,l);
                } else {
                        r = s + r;
                }
          }
          return r + last;
        }
    }());
    
    var addCommas7 = function(int) {
        var resultDigits = [];
        var intDigits = ("" + int).split("");
        for (var i = intDigits.length, ctr = 0; i --> 0; ctr++) {
            resultDigits.push(intDigits[i]);
            if (ctr % 3 == 2 && i > 0) { resultDigits.push(","); }
        }
        return resultDigits.reverse().join("");
    }
    
    var addCommas8 = function(num) {
        return (num+'').replace(/(\d)(?=(\d{3})+(\D.+)?$)/g, '$1,');
    };

Test runner

Ready to run.

Testing in
TestOps/sec
math
addCommas1(333000000000000000000) // 3.33e20
ready
Theirs
addCommas2(333000000000000000000) // 3.33e20
ready
another one
addCommas3(333000000000000000000) // 3.33e20
ready
while regex
addCommas4(333000000000000000000) // 3.33e20
ready
split join
addCommas5(333000000000000000000) // 3.33e20
ready
while rebuild
addCommas6(333000000000000000000) // 3.33e20
ready
plain loop
addCommas7(333000000000000000000) // 3.33e20
ready
simpler regex
addCommas8(333000000000000000000) // 3.33e20
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Ryan Sullivan on
  • Revision 2: published by Ryan Sullivan on
  • Revision 3: published by Ryan Sullivan on
  • Revision 9: published by Scott Sauyet on
  • Revision 10: published by dexbol on