Number formatting with commas (v17)

Revision 17 of this benchmark created on


Description

to check the performance of regex over a native method Number.toLocaleString() and an array based implementation for number formatting in JavaScript.

Setup

var number = 4343005353.53;
    
    function formatNumber(num) {
      var decimalPart = '';
      num = num.toString();
      if (num.indexOf('.') != -1) {
        decimalPart = '.' + num.split('.')[1];
        num = parseInt(num.split('.')[0]);
      }
      var array = num.toString().split('');
      var index = -3;
      while (array.length + index > 0) {
        array.splice(index, 0, ',');
        index -= 4;
      }
      return array.join('') + decimalPart;
    };
    
    function formatNumberRgx(num) {
      var parts = num.toString().split(".");
      parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
      return parts.join(".");
    };
    
    function formatWithRemainders(value) {
      var original = value;
      var isNegative = value < 0;
      var absValue = Math.abs(value);
      var floorValue = Math.floor(absValue);
      var v = floorValue;
      if (v == 0) return "0";
      var formatted = "";
      while (v > 0) {
        if (formatted.length > 0) {
          formatted = "," + formatted;
        }
        var remainder = (v % 1000) + "";
        v = Math.floor(v / 1000);
        if (v > 0) {
          for (var i = remainder.length; i < 3; i++) {
            remainder = "0" + remainder;
          }
        }
        formatted = remainder + formatted;
      }
      if (absValue !== floorValue) {
        formatted += "." + original.toString().split('.')[1];
      }
      if (isNegative) {
        formatted = "-" + formatted;
      }
      return formatted;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
without regex
formatNumber(number);
ready
with regex
formatNumberRgx(number);
ready
with locale string
number.toLocaleString();
ready
using remainders
formatWithRemainders(number);
ready

Revisions

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