Как отформатировать числа, добавив 0 к однозначным числам? - PullRequest
242 голосов
/ 08 ноября 2011

Я хочу отформатировать число, чтобы оно состояло из двух цифр. Проблема возникает, когда передается 0 - 9, поэтому мне нужно отформатировать его в 00 - 09.

Есть ли в JavaScript средство форматирования чисел?

Ответы [ 29 ]

494 голосов
/ 08 ноября 2011

Лучший метод, который я нашел, это что-то вроде следующего:

(обратите внимание, что эта простая версия работает только для натуральных чисел)

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

Для десятичных чисел вы можете использовать этот код (хотя это немного неаккуратно).

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);

Наконец, если вам приходится иметь дело с возможностью отрицательных чисел, лучше сохранить знак, применить форматирование к абсолютному значению числа, иповторно применить знак после факта.Обратите внимание, что этот метод не ограничивает число до 2 цифр.Вместо этого он ограничивает число только слева от десятичной дроби (целая часть).(Линия, которая определяет знак, была найдена здесь ).

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);
114 голосов
/ 08 ноября 2011

Если число больше 9, преобразовать число в строку (согласованность). В противном случае добавьте ноль.

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

n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"
97 голосов
/ 17 июля 2015

Используйте метод toLocaleString () для любого числа. Таким образом, для числа 6, как показано ниже, вы можете получить желаемые результаты.

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

Сгенерирует строку '06'.

47 голосов
/ 08 ноября 2011

Вот простая функция ввода чисел, которую я обычно использую.Это допускает любое количество отступов.

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

Примеры:

leftPad(1, 2) // 01
leftPad(10, 2) // 10
leftPad(100, 2) // 100
leftPad(1, 3) // 001
leftPad(1, 8) // 00000001
24 голосов
/ 22 августа 2017

Во всех современных браузерах вы можете использовать

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);
  }
);
11 голосов
/ 02 июля 2013
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);
9 голосов
/ 07 мая 2015

Вы можете сделать:

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

Пример:

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 />');

Результат:

00
01
02
10
15
9 голосов
/ 10 июля 2018

@ Ответ Lifehack был очень полезен для меня;где я думаю, что мы можем сделать это в одну строку для положительных чисел

 String(input).padStart(2, '0');
7 голосов
/ 08 ноября 2011

Кажется, у вас может быть строка вместо числа.используйте это:

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

Вот пример: http://jsfiddle.net/xtgFp/

6 голосов
/ 31 июля 2014

Это просто и работает довольно хорошо:

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