Как вывести числа сLeading Zero в JavaScript?
Проблема с добавлением нулей в начале числа
Я столкнулся с проблемой, связанной с форматированием чисел. Мне нужно добавитьLeading нули к числам, чтобы конечная строка имела фиксированную длину.
Например, если у меня есть число 5
, я хочу, чтобы оно превратилось в строку "05"
, если я укажу, что длина должна быть равной 2. Как я могу это сделать?
Заранее благодарю за помощь!
4 ответ(ов)
Вы можете расширить объект Number
, добавив метод pad
, который позволяет дополнить число нулями до заданной длины. Вот пример реализации:
Number.prototype.pad = function(size) {
var s = String(this);
while (s.length < (size || 2)) {s = "0" + s;}
return s;
}
Примеры использования:
(9).pad(); // возвращает "09"
(7).pad(3); // возвращает "007"
Этот метод преобразует число в строку и добавляет ведущие нули, пока длина строки не достигнет указанного размера. Если размер не указан, метод по умолчанию выравнивает строку до 2 символов.
Вот перевод кода и комментариев на русский язык в стиле ответа на StackOverflow:
function pad(a, b) {
return(1e15 + a + '').slice(-b);
}
С комментариями:
function pad(
a, // число, которое нужно преобразовать
b // количество символов в результате
) {
return (
1e15 + a + // складываем с большим числом
"" // преобразуем в строку
).slice(-b) // обрезаем ведущий "1"
}
Объяснение работы функции:
Эта функция pad
принимает два аргумента: число a
, которое вы хотите преобразовать, и число b
, которое определяет, сколько символов должно быть в итоговой строке.
1e15 + a
- складываемa
с очень большим числом, чтобы гарантировать, что при конкатенации появится достаточно символов.+ ''
- преобразует результат в строку..slice(-b)
- обрезает строку, оставляя только последниеb
символов, тем самым удаляя ведущие символы, такие как "1".
Таким образом, вы получаете строку длиной b
, содержащую число a
, дополненное нулями слева, если это необходимо.
Функция zfill
в JavaScript предназначена для удобного дополнения числа нулями слева до заданной длины. Вот как она работает:
function zfill(num, len) {
return (Array(len).join("0") + num).slice(-len);
}
Объяснение:
Array(len): Создает массив длиной
len
. Важно отметить, что это массив, заполненныйundefined
, так что просто создать его не достаточно.Array(len).join("0"): Используя метод
join
, мы соединяем все элементы массива в строку, вставляя между ними символ"0"
. В результате получается строка изlen
нулей.(Array(len).join("0") + num): Затем мы конкатенируем строку нулей с переданным числом
num
. Еслиnum
0
, это возрастет до строки"000...0" + "0"
, например,"0000"
дляlen = 4
..slice(-len): Наконец, мы используем метод
slice
, чтобы взять последниеlen
символов получившейся строки. Это позволяет отрезать лишние нули, если значениеnum
больше или равно10...0
в соответствии с длиной.
Пример использования:
console.log(zfill(5, 3)); // "005"
console.log(zfill(42, 5)); // "00042"
console.log(zfill(1234, 2)); // "34"
Таким образом, данная функция полезна для форматирования чисел, например, перед выводом в таблицы или другие интерфейсы, где требуется фиксированное количество символов.
Вот интересная реализация функции дополнения строки нулями, которая использует кэширование для строки нулей:
pad.zeros = new Array(5).join('0');
function pad(num, len) {
var str = String(num),
diff = len - str.length;
if(diff <= 0) return str;
if(diff > pad.zeros.length)
pad.zeros = new Array(diff + 1).join('0');
return pad.zeros.substr(0, diff) + str;
}
Если значение diff
(количество необходимых дополнений) велико и функция вызывается достаточно часто, то такая реализация действительно показывает лучшую производительность по сравнению с другими методами.
Форматирование числа с обязательным отображением 2 знаков после запятой
Где найти документацию по форматированию даты в JavaScript?
Как проверить, содержит ли массив строку в TypeScript?
Ссылка и выполнение внешнего JavaScript-файла, размещенного на GitHub
Как остановить Babel от трансформации 'this' в 'undefined' и добавления "use strict"