Ответ 1
function pad_with_zeroes(number, length) {
var my_string = '' + number;
while (my_string.length < length) {
my_string = '0' + my_string;
}
return my_string;
}
var number = 1310;
следует оставить в покое.
var number = 120;
следует изменить на "0120";
var number = 10;
следует изменить на "0010";
var number = 7;
следует изменить на "0007";
function pad_with_zeroes(number, length) {
var my_string = '' + number;
while (my_string.length < length) {
my_string = '0' + my_string;
}
return my_string;
}
Во всех современных браузерах вы можете использовать
numberStr.padStart(4, "0");
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
function zeroPad(num) {
return num.toString().padStart(4, "0");
}
var numbers = [1310, 120, 10, 7];
numbers.forEach(
function(num) {
var paddedNum = zeroPad(num);
console.log(paddedNum);
}
);
Здесь другой путь. Исходя из того, что я делал, это нужно делать тысячи раз при загрузке страницы. Это довольно эффективный процессор для жесткого кодирования последовательности нулей один раз, и нарезать столько, сколько вам нужно для пэда, сколько угодно раз. Мне действительно нравится сила 10-го метода - это довольно гибкая.
Во всяком случае, это так же эффективно, как я мог придумать:
Для исходного вопроса ВЫБЕРИТЕ ОДИН из случаев...
var number = 1310;
var number = 120;
var number = 10;
var number = 7;
затем
// only needs to happen once
var zeroString = "00000";
// one assignment gets the padded number
var paddedNum = zeroString.substring((number + "").length, 4) + bareNum;
//output
alert("The padded number string is: " + paddedNum);
Конечно, вам все равно нужно проверить ввод. Поскольку это ТОЛЬКО работает надежно при следующих условиях:
Предыстория:
У меня есть случай, который требует фиксированной длины (14 цифр) с нулевым количеством. Я хотел посмотреть, насколько я могу это сделать. Он работает десятки тысяч раз при загрузке страницы, поэтому эффективность имеет значение. Он не совсем повторно используется как есть, и он немного неэффективен. Кроме того, что это очень просто.
Для нужных n цифр с заполненной строкой этот метод требует строки (по крайней мере) n + 1 нулей. Индекс 0 - это первый символ в строке, который никогда не будет использоваться, так что действительно может быть что угодно.
Обратите внимание, что string.substring() отличается от string.substr()!
var bareNum = 42 + '';
var zeroString = "000000000000000";
var paddedNum = zeroString.substring(bareNumber.length, 14) + bareNum
Это выталкивает нули с нуляString, начиная с позиции, соответствующей длине строки, и продолжает получать нули до необходимой длины 14. Пока эта "14" в третьей строке является нижним целым числом, чем число символов в zeroString, он будет работать.
//to: 0 - to left, 1 - to right
String.prototype.pad = function(_char, len, to) {
if (!this || !_char || this.length >= len) {
return this;
}
to = to || 0;
var ret = this;
var max = (len - this.length)/_char.length + 1;
while (--max) {
ret = (to) ? ret + _char : _char + ret;
}
return ret;
};
Использование:
someString.pad(neededChars, neededLength)
Пример:
'332'.pad('0', 6); //'000332'
'332'.pad('0', 6, 1); //'332000'
function pad(n, len) {
return (new Array(len + 1).join('0') + n).slice(-len);
}
может не работать в старых версиях IE.
попробуйте это:
('0000' + number).slice(-4);
или
(number+'').padStart(4,'0');
Подход, который мне нравится, - это добавить 10 ^ N к числу, где N - количество нулей, которые вы хотите. Обработать результирующее число как строку и отрезать нулевую цифру. Конечно, вам нужно быть осторожным, если ваш номер ввода может быть больше длины вашего пэда, но он все еще намного быстрее, чем метод цикла:
// You want to pad four places:
>>> var N = Math.pow(10, 4)
>>> var number = 1310
>>> number < N ? ("" + (N + number)).slice(1) : "" + number
"1310"
>>> var number = 120
>>> number < N ? ("" + (N + number)).slice(1) : "" + number
"0120"
>>> var number = 10
>>> number < N ? ("" + (N + number)).slice(1) : "" + number
"0010"
…
и т.д.. Вы можете сделать это достаточно легко:
/**
* Pad a number with leading zeros to "pad" places:
*
* @param number: The number to pad
* @param pad: The maximum number of leading zeros
*/
function padNumber(number, pad) {
var N = Math.pow(10, pad);
return number < N ? ("" + (N + number)).slice(1) : "" + number
}
Нет цикла, нет функций
let n = "" + 100;
let x = ("0000000000" + n).substring(n.length);//add your amount of zeros
alert(x + "-" + x.length);
Нейт как лучший способ, который я нашел, слишком долго читать. Поэтому я предлагаю вам 3 простых решения.
1. Так вот мое упрощение ответа Нейта.
//number = 42
"0000".substring(number.toString().length, 4) + number;
2. Вот решение, которое делает его более пригодным для повторного использования с помощью функции, которая принимает число и желаемую длину в параметрах.
function pad_with_zeroes(number, len) {
var zeroes = "0".repeat(len);
return zeroes.substring(number.toString().length, len) + number;
}
// Usage: pad_with_zeroes(42,4);
// Returns "0042"
3. Здесь третье решение, расширяющее прототип Number.
Number.prototype.toStringMinLen = function(len) {
var zeroes = "0".repeat(len);
return zeroes.substring(self.toString().length, len) + self;
}
//Usage: tmp=42; tmp.toStringMinLen(4)
Я написал общую функцию для этого. Он принимает управление вводом и длину пэда в качестве ввода.
function padLeft(input, padLength) {
var num = $("#" + input).val();
$("#" + input).val(('0'.repeat(padLength) + num).slice(-padLength));
}
Используйте функцию String.JS librairy padLeft:
S('123').padLeft(5, '0').s --> 00123