Ways to 0-pad a number (v22)

Revision 22 of this benchmark created by Sorpigal on


Description

There are lots of ways to zero-pad a number in JavaScript. Which is fastest?

(improved loop performance when at least one zero will be added) functions are placed into obj. to even the tests against the one that uses it as a method instead of a global function like the others.

Setup

/**
     * Pad a number with leading zeros to "pad" places:
     *
     * @param number: The number to pad
     * @param pad: The maximum number of leading zeros
     */
    var obj={};
    
    obj.padNumberMath = function(number, pad) {"use strict";
        var N = Math.pow(10, pad);
        return number < N ? ("" + (N + number)).slice(1) : "" + number;
    };
    
    obj.padNumberArray = function(n, len) {"use strict";
      return (new Array(len + 1).join('0') + n).slice(-len);
    };
    
    obj.padNumberLoop = function(number, length) {"use strict";
        var my_string = '' + number;
        for (var to_add = length - my_string.length; to_add > 0; to_add -= 1){
            my_string = '0' + my_string;
        }
        return my_string;
    };
    
    const sliceZeros = '00000000000000000000000000000000000000000';
    obj.padNumberSlice = function(number,pad) {"use strict";
        var my_string = '' + number;
        return sliceZeros.slice(my_string.length,pad) + my_string;
    };
    
    obj.padNumberLoop2 = function(number, length) {"use strict";
        var my_string = ''+number;
        for (var to_add = length - my_string.length; to_add > 0; --to_add) {
            my_string = '0' + my_string;
        }
        return my_string;
    };
    
    obj.padNumberConcat = function(number, length) {"use strict";
        var my_string = '';
        for (var i=(number+'').length; i<length; ++i) {
            my_string += '0';
        }
        return my_string + number;
    };
    
    obj.padNumberConcat2 = function(number, length) {"use strict";
        number+='';
        var my_string='';
        for (var i=number.length; i<length; ++i) {
            my_string+= '0';
        }
        return my_string + number;
    };
    
    obj.padNumberNaive = function(number, dummy) {"use strict";
        if(number > 9){
            return '' + number;
        }
        return '0' + number;
    };

Test runner

Ready to run.

Testing in
TestOps/sec
Math
obj.padNumberMath(1301, 1);
obj.padNumberMath(120, 1);
obj.padNumberMath(14, 1);
obj.padNumberMath(9, 1);
ready
Array join
obj.padNumberArray(1301, 1);
obj.padNumberArray(120, 1);
obj.padNumberArray(14, 1);
obj.padNumberArray(9, 1);
ready
Loop1
obj.padNumberLoop(1301, 1);
obj.padNumberLoop(120, 1);
obj.padNumberLoop(14, 1);
obj.padNumberLoop(9, 1);
ready
.slice()
obj.padNumberSlice(1301, 1);
obj.padNumberSlice(120, 1);
obj.padNumberSlice(14, 1);
obj.padNumberSlice(9, 1);
ready
Loop2
obj.padNumberLoop2(1301, 1);
obj.padNumberLoop2(120, 1);
obj.padNumberLoop2(14, 1);
obj.padNumberLoop2(9, 1);
ready
Concat1
obj.padNumberConcat(1301, 1);
obj.padNumberConcat(120, 1);
obj.padNumberConcat(14, 1);
obj.padNumberConcat(9, 1);
ready
Concat2
obj.padNumberConcat2(1301, 1);
obj.padNumberConcat2(120, 1);
obj.padNumberConcat2(14, 1);
obj.padNumberConcat2(9, 1);
ready
Simple/Naive
obj.padNumberNaive(1301, 1);
obj.padNumberNaive(120, 1);
obj.padNumberNaive(14, 1);
obj.padNumberNaive(9, 1);
ready

Revisions

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