How to format numbers by prepending 0 to single-digit numbers?

JavascriptNumber Formatting

Javascript Problem Overview


I want to format a number to have two digits. The problem is caused when 09 is passed, so I need it to be formatted to 0009.

Is there a number formatter in JavaScript?

Javascript Solutions


Solution 1 - Javascript

Edit (2021):

It's no longer necessary to format numbers by hand like this anymore. This answer was written way-back-when in the distant year of 2011 when IE was important and babel and bundlers were just a wonderful, hopeful dream.

I think it would be a mistake to delete this answer; however in case you find yourself here, I would like to kindly direct your attention to the second highest voted answer to this question as of this edit.

It will introduce you to the use of .toLocaleString() with the options parameter of {minimumIntegerDigits: 2}. Exciting stuff. Below I've recreated all three examples from my original answer using this method for your convenience.

[7, 7.5, -7.2345].forEach(myNumber => {
  let formattedNumber = myNumber.toLocaleString('en-US', {
    minimumIntegerDigits: 2,
    useGrouping: false
  })
  console.log(
    'Input:    ' + myNumber + '\n' +
    'Output:   ' + formattedNumber
  )
})


Original Answer:

The best method I've found is something like the following:

(Note that this simple version only works for positive integers)

var myNumber = 7;
var formattedNumber = ("0" + myNumber).slice(-2);
console.log(formattedNumber);

For decimals, you could use this code (it's a bit sloppy though).

var myNumber = 7.5;
var dec = myNumber - Math.floor(myNumber);
myNumber = myNumber - dec;
var formattedNumber = ("0" + myNumber).slice(-2) + dec.toString().substr(1);
console.log(formattedNumber);

Lastly, if you're having to deal with the possibility of negative numbers, it's best to store the sign, apply the formatting to the absolute value of the number, and reapply the sign after the fact. Note that this method doesn't restrict the number to 2 total digits. Instead it only restricts the number to the left of the decimal (the integer part). (The line that determines the sign was found here).

var myNumber = -7.2345;
var sign = myNumber?myNumber<0?-1:1:0;
myNumber = myNumber * sign + ''; // poor man's absolute value
var dec = myNumber.match(/\.\d+$/);
var int = myNumber.match(/^[^\.]+/);

var formattedNumber = (sign < 0 ? '-' : '') + ("0" + int).slice(-2) + (dec !== null ? dec : '');
console.log(formattedNumber);

Solution 2 - Javascript

Use the toLocaleString() method in any number. So for the number 6, as seen below, you can get the desired results.

(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})

Will generate the string '06'.

Solution 3 - Javascript

If the number is higher than 9, convert the number to a string (consistency). Otherwise, add a zero.

function n(n){
    return n > 9 ? "" + n: "0" + n;
}

n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"

Solution 4 - Javascript

In all modern browsers you can use

numberStr.padStart(2, "0");

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

function zeroPad(numberStr) {
  return numberStr.padStart(2, "0");
}

var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

numbers.forEach(
  function(num) {
    var numString = num.toString();
    
    var paddedNum = zeroPad(numString);

    console.log(paddedNum);
  }
);

Solution 5 - Javascript

Here's a simple number padding function that I use usually. It allows for any amount of padding.

function leftPad(number, targetLength) {
    var output = number + '';
    while (output.length < targetLength) {
        output = '0' + output;
    }
    return output;
}

Examples:

leftPad(1, 2) // 01
leftPad(10, 2) // 10
leftPad(100, 2) // 100
leftPad(1, 3) // 001
leftPad(1, 8) // 00000001

Solution 6 - Javascript

@Lifehack's answer was very useful to me; where I think we can do it in one line for positive numbers

 String(input).padStart(2, '0');

Solution 7 - Javascript

You can use the padStart method:

more info: <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart>

check this example:

function n(num, len = 2) {
  return `${num}`.padStart(len, '0');
}

console.log(n( 9));   //print "09"
console.log(n(10));   //print "10"
console.log(n(999));  //print "999"
console.log(n(999,6));//print "000999"

Solution 8 - Javascript

("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);

Solution 9 - Javascript

You can do:

function pad2(number) {
   return (number < 10 ? '0' : '') + number
}

Example:

document.write(pad2(0) + '<br />');
document.write(pad2(1) + '<br />');
document.write(pad2(2) + '<br />');
document.write(pad2(10) + '<br />');
document.write(pad2(15) + '<br />');

Result:

00
01
02
10
15

Solution 10 - Javascript

It seems you might have a string, instead of a number. use this:

var num = document.getElementById('input').value,
    replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;

Here's an example: http://jsfiddle.net/xtgFp/

Solution 11 - Javascript

Here is a very simple solution that worked well for me.

First declare a variable to hold your number.

var number;

Now convert the number to a string and hold it in another variable;

var numberStr = number.toString();

Now you can test the length of this string , if it is less than desired you can append a 'zero' at the beginning.

if(numberStr.length < 2){
      number = '0' + number;
}

Now use the number as desired

console.log(number);

Solution 12 - Javascript

Quick and dirty one liner....

function zpad(n, len) {
  return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}

Solution 13 - Javascript

This is simple and works pretty well:

function twoDigit(number) {
  var twodigit = number >= 10 ? number : "0"+number.toString();
  return twodigit;
}

Solution 14 - Javascript

Here's the easiest solution I found:-

let num = 9; // any number between 0 & 99
let result = ( '0' + num ).substr( -2 );

Solution 15 - Javascript

I know this is an ancient post, but I wanted to provide a more flexible and OO solution option.

I've extrapolated the accepted answer a bit and extended javascript's Number object to allow for adjustable zero padding:

Number.prototype.zeroPad = function(digits) {
  var loop = digits;
  var zeros = "";
  while (loop) {
    zeros += "0";
    loop--;
  }
  return (this.toString().length > digits) ?
    this.toString() : (zeros + this).slice(-digits);
}
var v = 5;
console.log(v.zeroPad(2)); // returns "05"
console.log(v.zeroPad(4)); // returns "0005"

Edit: Add code to prevent cutting off numbers longer than your requested digits.

NOTE: This is obsolete in all but IE. Use padStart() instead.

Solution 16 - Javascript

Improved version of previous answer

function atLeast2Digit(n){
    n = parseInt(n); //ex. if already passed '05' it will be converted to number 5
    var ret = n > 9 ? "" + n: "0" + n;
    return ret;
}

alert(atLeast2Digit(5));

Solution 17 - Javascript

My version:

`${Math.trunc(num / 10)}${Math.trunc(num % 10)}`;

const func = (num) => `${Math.trunc(num / 10)}${Math.trunc(num % 10)}`;

const nums = [1, 3, 5, 6, 8, 9, 10, 20, 56, 80];
nums.forEach(num => console.log(func(num)));

Solution 18 - Javascript

There is not a built-in number formatter for JavaScript, but there are some libraries that accomplish this:

  1. underscore.string provides an sprintf function (along with many other useful formatters)
  2. javascript-sprintf, which underscore.string borrows from.

Solution 19 - Javascript

Updated for ES6 Arrow Functions (Supported in almost all modern browsers, see CanIUse)

const formatNumber = n => ("0" + n).slice(-2);

Solution 20 - Javascript

or

function zpad(n,l){
   return rep(l-n.toString().length, '0') + n.toString();
}

with

function rep(len, chr) { 
   return new Array(len+1).join(chr);
}

Solution 21 - Javascript

If you want to limit your digits at the same time:

function pad2(number) {
  number = (number < 10 ? '0' : '') + number;
  number = number.substring(0,2);
  return number;
}

This would also chop of any value that exceeds two digits. I have been extending this upon fanaur's solution.

Solution 22 - Javascript

`${number}`.replace(/^(\d)$/, '0$1');

Regex is the best.

Solution 23 - Javascript

<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                $('#test').keypress(allowOnlyTwoPositiveDigts);
            });
			
            function allowOnlyTwoPositiveDigts(e){
				
                var test = /^[\-]?[0-9]{1,2}?$/
                return test.test(this.value+String.fromCharCode(e.which))
            }
			
        </script>
    </head>
    <body>
        <input id="test" type="text" />
    </body>
</html>

Solution 24 - Javascript

Here's a simple recursive solution that works for any number of digits.

function numToNDigitStr(num, n)
{
	if(num >=  Math.pow(10, n - 1)) { return num; }
	return "0" + numToNDigitStr(num, n-1);
}

Solution 25 - Javascript

If you don't have lodash in your project it will be an overkill to add the whole library just to use one function. This is the most sophisticated solution of your problem I've ever seen.

_.padStart(num, 2, '0')

Solution 26 - Javascript

I built a pretty simple format function that I call whenever I need a simple date formatted. It deals with formatting single digits to double digits when they're less than 10. It kicks out a date formatted as Sat Sep 29 2018 - 00:05:44

This function is used as part of a utils variable so it's called as:

let timestamp = utils._dateFormatter('your date string');

var utils = {
  _dateFormatter: function(dateString) {
    let d = new Date(dateString);
    let hours = d.getHours();
    let minutes = d.getMinutes();
    let seconds = d.getSeconds();
    d = d.toDateString();
    if (hours < 10) {
      hours = '0' + hours;
    }
    if (minutes < 10) {
      minutes = '0' + minutes;
    }
    if (seconds < 10) {
      seconds = '0' + seconds;
    }
    let formattedDate = d + ' - ' + hours + ':' + minutes + ':' + seconds;
    return formattedDate;
  }
}

Solution 27 - Javascript

My Example like this

         var n =9;
         var checkval=('00'+n).slice(-2);
         console.log(checkval)

and the output is 09

Solution 28 - Javascript

Here's my version. Can easily be adapted to other scenarios.

function setNumericFormat(value) {
	var length = value.toString().length;
	if (length < 4) {
		var prefix = "";
		for (var i = 1; i <= 4 - length; i++) {
			prefix += "0";
		}
		return prefix + value.toString();
	}
	return 	value.toString();
}

Solution 29 - Javascript

    function colorOf(r,g,b){
  var f = function (x) {
    return (x<16 ? '0' : '') + x.toString(16) 
  };
  
  return "#" +  f(r) + f(g) + f(b);
}

Solution 30 - Javascript

For anyone who wants to have time differences and have results that can take negative numbers here is a good one. pad(3) = "03", pad(-2) = "-02", pad(-234) = "-234"

pad = function(n){
  if(n >= 0){
    return n > 9 ? "" + n : "0" + n;
  }else{
    return n < -9 ? "" + n : "-0" + Math.abs(n);
  }
}

Solution 31 - Javascript

my example would be:

<div id="showTime"></div>

    function x() {
    var showTime = document.getElementById("showTime");
    var myTime = new Date();
    var hour = myTime.getHours();
    var minu = myTime.getMinutes();
    var secs = myTime.getSeconds();
    if (hour < 10) {
        hour = "0" + hour
    };
    if (minu < 10) {
        minu = "0" + minu
    };
    if (secs < 10) {
        secs = "0" + secs
    };

    showTime.innerHTML = hour + ":" + minu + ":" + secs;
}

setInterval("x()", 1000)

Solution 32 - Javascript

with this function you can print with any n digits you want

function frmtDigit(num, n) {
    isMinus = num < 0;
    if (isMinus)
        num *= -1;
    digit = '';
    if (typeof n == 'undefined')
        n = 2;//two digits
    for (i = 1; i < n; i++) {
        if (num < (1 + Array(i + 1).join("0")))
            digit += '0';
    }
    digit = (isMinus ? '-' : '') + digit + num;
    return digit;
};

Solution 33 - Javascript

AS datatype in Javascript are determined dynamically it treats 04 as 4 Use conditional statement if value is lesser then 10 then add 0 before it by make it string E.g,

var x=4;
  x = x<10?"0"+x:x
 console.log(x); // 04

Solution 34 - Javascript

This is an old question, but wanted to add to it. In modern browsers you may use repeat which makes formatting simple for positive numbers:

('0'.repeat(digits - 1) + num).substr(-digits)

If you want support for IE and know the maximum number of digits (for instance, 10 digits):

('000000000' + num).substr(-digits)

For negative integers:

(num < 0 ? '-' : '') + ('000000000' + Math.abs(num)).substr(-digits)

With an explicit + for positive numbers:

['-', '', '+'][Math.sign(num) + 1] + ('000000000' + Math.abs(num)).substr(-digits)

Solution 35 - Javascript

This is a very nice and short solution:

smartTime(time) {
  return time < 10 ? "0" + time.toString().trim() : time;
}

Solution 36 - Javascript

You may also use Intl an ECMAScript International API that can customize your number as simple as this

let Number= Intl.NumberFormat('en-US', {
  minimumIntegerDigits: 2,
  minimumFractionDigits: 2
});

console.log(Number.format(2));
//02.00

and lots of embeded function that has Intl, you can put a prefix notation, signs and money format etc. for documentation just click here

Solution 37 - Javascript

You may use zfill function if the value is numeric and > 0.

str(value).zfill(digit_number)

Example:

str(0).zfill(2)

will be: '00'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKeith PowerView Question on Stackoverflow
Solution 1 - JavascriptJoseph MarikleView Answer on Stackoverflow
Solution 2 - JavascriptnyteshadeView Answer on Stackoverflow
Solution 3 - JavascriptRob WView Answer on Stackoverflow
Solution 4 - JavascriptLifehackView Answer on Stackoverflow
Solution 5 - JavascripttimrwoodView Answer on Stackoverflow
Solution 6 - JavascriptJee MokView Answer on Stackoverflow
Solution 7 - JavascriptfitorecView Answer on Stackoverflow
Solution 8 - JavascriptStarkView Answer on Stackoverflow
Solution 9 - JavascriptfanaurView Answer on Stackoverflow
Solution 10 - JavascriptJoeView Answer on Stackoverflow
Solution 11 - JavascriptEdgar256View Answer on Stackoverflow
Solution 12 - JavascriptpwukView Answer on Stackoverflow
Solution 13 - JavascriptnickolusroyView Answer on Stackoverflow
Solution 14 - JavascriptBassamView Answer on Stackoverflow
Solution 15 - JavascriptNoah DuncanView Answer on Stackoverflow
Solution 16 - JavascriptAnand SinghView Answer on Stackoverflow
Solution 17 - Javascriptuser9949678View Answer on Stackoverflow
Solution 18 - JavascriptcoltraneofmarsView Answer on Stackoverflow
Solution 19 - JavascriptalistairView Answer on Stackoverflow
Solution 20 - JavascriptpwukView Answer on Stackoverflow
Solution 21 - JavascriptleopoldView Answer on Stackoverflow
Solution 22 - JavascriptSon Tr.View Answer on Stackoverflow
Solution 23 - JavascriptVictor JatobáView Answer on Stackoverflow
Solution 24 - Javascriptuser1052527View Answer on Stackoverflow
Solution 25 - JavascriptkucherenkovovaView Answer on Stackoverflow
Solution 26 - JavascriptArqView Answer on Stackoverflow
Solution 27 - JavascriptAakash SajjadView Answer on Stackoverflow
Solution 28 - JavascriptVeverkeView Answer on Stackoverflow
Solution 29 - JavascriptAlexey TseitlinView Answer on Stackoverflow
Solution 30 - JavascriptmjwrazorView Answer on Stackoverflow
Solution 31 - JavascriptDHJView Answer on Stackoverflow
Solution 32 - JavascriptjalmatariView Answer on Stackoverflow
Solution 33 - JavascriptSiddharthaView Answer on Stackoverflow
Solution 34 - JavascriptJavier ElicesView Answer on Stackoverflow
Solution 35 - JavascriptPorsesView Answer on Stackoverflow
Solution 36 - JavascriptMarvinView Answer on Stackoverflow
Solution 37 - JavascriptMarjanView Answer on Stackoverflow