Добавить ведущие нули к числу в JavaScript
Заголовок: Как добавить ведущие нули к числу в JavaScript?
Тело вопроса: В JavaScript мне нужно добавлять нули до значения числа. Например, если у меня есть число 9, оно должно отображаться как "0009". Для числа 10 результатом должно быть "0010". Обратите внимание, что в любом случае результат должен содержать ровно четыре цифры.
Один из способов решения этой задачи заключается в том, чтобы вычесть 4 из числа, чтобы получить количество нулей, которые нужно добавить. Однако, меня интересует, есть ли более элегантный способ достижения этой цели?
Благодарю вас заранее за помощь!
5 ответ(ов)
Конечно! Вот перевод вашего кода на русский в стиле ответа на StackOverflow:
function padToFour(number) {
if (number <= 9999) {
number = ("000" + number).slice(-4);
}
return number;
}
Что-то вроде этого?
Бонус: изящная и непонятная однострочная версия ES6:
let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;
Теперь о некоторых особенностях ES6:
let
— это переменная, имеющая блочную область видимости (в отличие отvar
, у которой область видимости функциональная).=>
— это стрелочная функция, которая, помимо прочего, заменяетfunction
и предшествует ее параметрам.- Если у стрелочной функции только один параметр, можно опустить скобки (поэтому
number =>
). - Если тело стрелочной функции состоит из одной строки, начинающейся с
return
, можно опустить фигурные скобки и ключевое словоreturn
, просто используя выражение. - Для того чтобы свести тело функции к одной строке, я использовал тернарное выражение.
Вы можете сделать что-то вроде этого:
function pad(num, size) {
return (Math.pow(10, size) + ~~num).toString().substring(1);
}
Правка: Это была просто базовая идея для функции, но для добавления поддержки больших чисел (а также для обработки некорректного ввода) будет лучше сделать так:
function pad(num, size) {
if (num.toString().length >= size) return num;
return (Math.pow(10, size) + Math.floor(num)).toString().substring(1);
}
Эта функция делает 2 вещи:
- Если число больше, чем указанная длина, она просто возвращает это число.
- Использование
Math.floor(num)
вместо~~num
позволит поддерживать большие числа.
Недавно мне тоже понадобилось сделать что-то подобное.
Вот функция, которая добавляет нули перед числом до заданного количества цифр:
function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
Использовать её можно следующим образом:
padDigits(9, 4); // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"
Хотя решение не идеальное с точки зрения красоты, оно эффективно и делает свою работу.
Вы привели код, который добавляет нули к началу строки или числа, чтобы достичь заданной длины. Вот краткая пояснительная запись:
String.prototype.padZero = function(len, c) {
var s = '',
c = c || '0', // Символ заполнения по умолчанию '0'
len = (len || 2) - this.length; // Вычисляем, сколько нулей нужно добавить
while (s.length < len) {
s += c; // Добавляем символ заполнения
}
return s + this; // Возвращаем заполненную строку
}
Number.prototype.padZero = function(len, c) {
return String(this).padZero(len, c); // Применяем padZero к числу через преобразование в строку
}
Как использовать:
padZero
для строки:
let str = "5";
console.log(str.padZero(3)); // Вывод: "005"
padZero
для числа:
let num = 8;
console.log(num.padZero(4)); // Вывод: "0008"
В обоих случаях, len
указывает общую длину возвращаемой строки, а c
— это символ, который будет использоваться для заполнения (по умолчанию это '0'). Если вам нужно другое значение для c
, вы можете передать его в качестве второго аргумента.
Если у вас есть другие вопросы или нужны дополнительные объяснения, не стесняйтесь спрашивать!
Это не самый «изящный» подход, но операции с целыми числами выполняются быстрее, чем конкатенация строк для добавления каждого нуля.
function ZeroPadNumber(nValue) {
if (nValue < 10) {
return ('000' + nValue.toString());
} else if (nValue < 100) {
return ('00' + nValue.toString());
} else if (nValue < 1000) {
return ('0' + nValue.toString());
} else {
return (nValue);
}
}
Кроме того, эта функция жестко закодирована под вашу конкретную задачу (дополнение до 4 цифр), поэтому она не является универсальной.
Как форматировать числа в виде строк валюты
Как форматировать число с запятыми в качестве разделителей тысяч?
Форматирование даты в JavaScript в виде yyyy-mm-dd
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"