Как вывести числа с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. Еслиnum0, это возрастет до строки"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"