Left zero pad (v13)

Revision 13 of this benchmark created on


Description

Belonging to this question on StackOverflow.

Setup

var numsToPad = [
      [1, 100],
      [-123, 4],
      [5.619, 7],
      [1234567890, 2]
    ];

Test runner

Ready to run.

Testing in
TestOps/sec
Peter Bailey's
function f(n, w) {
  w -= n.toString().length;
  if (w > 0) return new Array(w + (/\./.test(n) ? 2 : 1)).join('0') + n;
  return str = n + "";
}
f(numsToPad[0][0], numsToPad[0][1]);
f(numsToPad[1][0], numsToPad[1][1]);
f(numsToPad[2][0], numsToPad[2][1]);
f(numsToPad[3][0], numsToPad[3][1]);
ready
profitehlolz's
function f(n, w) {
  var pad = new Array(1 + w).join('0');
  return (pad + n).slice(-pad.length);
}
f(numsToPad[0][0], numsToPad[0][1]);
f(numsToPad[1][0], numsToPad[1][1]);
f(numsToPad[2][0], numsToPad[2][1]);
f(numsToPad[3][0], numsToPad[3][1]);
ready
coderjoe's
function f(n, w) {
  var n_ = Math.abs(n);
  var zeros = Math.max(0, w - Math.floor(n_).toString().length);
  var zeroString = Math.pow(10, zeros).toString().substr(1);
  if (n < 0) {
    zeroString = '-' + zeroString;
  }

  return zeroString + n;
}
f(numsToPad[0][0], numsToPad[0][1]);
f(numsToPad[1][0], numsToPad[1][1]);
f(numsToPad[2][0], numsToPad[2][1]);
f(numsToPad[3][0], numsToPad[3][1]);
ready
logarithmic
function f(n, w) {
  var an = Math.abs(n);
  var digitCount = 1 + Math.floor(Math.log(an) / Math.LN10);
  if (digitCount >= w) {
    return n;
  }
  var zeroString = Math.pow(10, w - digitCount).toString().substr(1);
  return n < 0 ? '-' + zeroString + an : zeroString + an;
}
f(numsToPad[0][0], numsToPad[0][1]);
f(numsToPad[1][0], numsToPad[1][1]);
f(numsToPad[2][0], numsToPad[2][1]);
f(numsToPad[3][0], numsToPad[3][1]);
ready
slice
function f(number, length) {
  var absoluteNumber = Math.abs(number);
  return (Array(length).join('0') + '' + absoluteNumber).slice(-length);
}


f(numsToPad[0][0], numsToPad[0][1]);
f(numsToPad[1][0], numsToPad[1][1]);
f(numsToPad[2][0], numsToPad[2][1]);
f(numsToPad[3][0], numsToPad[3][1]);
ready

Revisions

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