Number Padding (v11)

Revision 11 of this benchmark created by Milan Adamovsky on


Description

Find the most efficient way to pad a number

Test runner

Ready to run.

Testing in
TestOps/sec
Lazy Man Way
(function(myInteger, paddingLength) {
 myInteger = myInteger.toString();

 var myIntegerLength = myInteger.length,
     paddingLength = paddingLength || 5,
     loopIterations = paddingLength - myIntegerLength,
     padding = "";

 if (paddingLength > myIntegerLength) {
  for (var i = 0; i < loopIterations; i++) {
   padding = ["0", padding].join('');
  }
 }

 return [padding, myInteger].join('');
})(50000, 22);
ready
Reverse While Loop w / Array + slice()
(function(myInteger, paddingLength) {

 var x = [];

 while (paddingLength--) {
  x.push(0);
 }

 x.push(myInteger);
 return x.slice(-(paddingLength - ("" + myInteger).length));

})(50000, 22);
ready
Reverse While Loop w / Strignified Array + slice()
(function(myInteger, paddingLength) {

 var x = [];

 while (paddingLength--) {
  x.push(0);
 }

 x.push(myInteger);
 x = x.join("");

 return x.slice(-(paddingLength - ("" + myInteger).length));

})(50000, 22);
ready
Reverse While Loop w / String + slice()
(function(myInteger, paddingLength) {

 var x = "";

 while (paddingLength--) {
  x += 0;
 }

 x += myInteger;

 return x.slice(-(paddingLength - ("" + myInteger).length));

})(50000, 22);
ready
Reverse While Loop w / Array length + slice()
(function(myInteger, paddingLength) {

 var x = [];

 while (paddingLength--) {
  x[x.length] = 0;
 }

 x[x.length] = myInteger;

 return x.slice(-(paddingLength - ("" + myInteger).length)).join("");

})(50000, 22);
ready
A Little Algorithm I devised
(function(myInteger, paddingLength) {

 var intString = (myInteger + ""),
     intLength = intString.length,
     x = intString;

 if (paddingLength > intLength) {
  if (paddingLength <= 20) {
   x = ((Math.pow(10, paddingLength) + "").substr(1) + intString).slice(-paddingLength);
  }
  else {
   var x = (Math.pow(10, 10) + "").substr(1),
       s = "";
   z = parseInt(paddingLength / 10);

   while (z--) {
    s += x;
   }

   r = paddingLength % 10;
   s += (Math.pow(10, r) + "").substr(1)

   x = (s + intString).slice(-paddingLength)
  }
 }

 return x;

})(50000, 22);
ready
(NO LONGER) bitwise
// NOTICE:  This solution does not satisfy requirements as it doesn't allow for an arbitrary length - but is a good alternative to when you know the possible finite zero padding length.  Possibly a good candidate for http://jsperf.com/zero-padding/9

(function(myInteger, paddingLength) {
 
 var nums = ['',
                 '0',
                 '00',
                 '000',
                 '0000',
                 '00000',
                 '000000',
                 '0000000',
                 '00000000',
                 '000000000',
                 '0000000000',
                 '00000000000',
                 '000000000000',
                 '0000000000000',
                 '00000000000000',
                 '000000000000000',
                 '0000000000000000',
                 '00000000000000000',
                 '000000000000000000',
                 '0000000000000000000',
                 '00000000000000000000',
                 '000000000000000000000',
                 '0000000000000000000000',
                 '00000000000000000000000',
                 '000000000000000000000000',
                 '0000000000000000000000000'],

    numStr = myInteger + "";

 return (nums[paddingLength - numStr.length - 1]) + numStr;

})(50000, 22);
ready
Cached Array
// NOTICE:  This solution does not satisfy requirements as it doesn't allow for an arbitrary length - but is a good alternative to when you know the possible finite zero padding length.  Possibly a good candidate for http://jsperf.com/zero-padding/9

(function(myInteger, paddingLength) {

  var padding = ['',
                 '0',
                 '00',
                 '000',
                 '0000',
                 '00000',
                 '000000',
                 '0000000',
                 '00000000',
                 '000000000',
                 '0000000000',
                 '00000000000',
                 '000000000000',
                 '0000000000000',
                 '00000000000000',
                 '000000000000000',
                 '0000000000000000',
                 '00000000000000000',
                 '000000000000000000',
                 '0000000000000000000',
                 '00000000000000000000',
                 '000000000000000000000',
                 '0000000000000000000000',
                 '00000000000000000000000',
                 '000000000000000000000000',
                 '0000000000000000000000000'];

  return padding[paddingLength] + myInteger;;

})(50000, 22);
ready
Roman Style
(function(myInteger, paddingLength) {

  var padding = ['',
                 '0',
                 '00',
                 '000',
                 '0000',
                 '00000',
                 '000000',
                 '0000000',
                 '00000000',
                 '000000000',
                 '0000000000'
                ],
  
      exponent = (paddingLength === 0)
                   ? 0 
                   : Math.pow(10, parseInt(Math.log(paddingLength) / Math.log(10))), 
      multipliers, output, x,str = ("" + myInteger);

  paddingLength -= str.length;
 
  if (paddingLength < 0)
   {
    output = str;
   }
  else if (paddingLength < 10 && paddingLength > -1)
   {
    output = padding[paddingLength] + myInteger;
   }
  else
   {    
    x = paddingLength / 10;
    multipliers = parseInt(x);
    
    output = (new Array(multipliers + 1).join(padding[10])) + padding[x * 10 % 10] + myInteger;
   }

 return output;
})(50000, 22);
ready

Revisions

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

  • Revision 1: published by Milan Adamovsky on
  • Revision 2: published by Milan Adamovsky on
  • Revision 3: published by Milan Adamovsky on
  • Revision 5: published by Milan Adamovsky on
  • Revision 6: published by Larry LeFever on
  • Revision 7: published by JP Grace on
  • Revision 8: published on
  • Revision 9: published by Larry LeFever on
  • Revision 11: published by Milan Adamovsky on
  • Revision 12: published by Milan Adamovsky on
  • Revision 13: published by Milan Adamovsky on
  • Revision 14: published by will on
  • Revision 15: published on
  • Revision 17: published by Phil Tang on