var number = 1310;
应该保持不变。
var number = 120;
应更改为“0120”;
var number = 10;
应更改为“0010”;
var number = 7;
应更改为“0007”;
答案 0 :(得分:28)
function pad_with_zeroes(number, length) {
var my_string = '' + number;
while (my_string.length < length) {
my_string = '0' + my_string;
}
return my_string;
}
答案 1 :(得分:12)
在所有现代浏览器中,您都可以使用
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);
}
);
&#13;
答案 2 :(得分:9)
这是另一种方式。来自我所做的事情,需要在页面加载上进行数千次。一次对一串零码进行硬编码非常有效,并根据需要多次切换所需的数量。我真的很喜欢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
这会从匹配字符串长度的位置开始从zeroString中拉出零,并继续获得所需的长度为14的零。只要第三行中的“14”是一个低于整数的整数zeroString中的字符,它将起作用。
答案 3 :(得分:5)
//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'
答案 4 :(得分:4)
function pad(n, len) {
return (new Array(len + 1).join('0') + n).slice(-len);
}
可能无法在旧的IE版本中使用。
答案 5 :(得分:1)
我喜欢的方法是在数字中加上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
}
答案 6 :(得分:1)
尝试这些:
sh -ac
或
('0000' + number).slice(-4);
答案 7 :(得分:0)
没有循环,没有功能
let n = "" + 100;
let x = ("0000000000" + n).substring(n.length);//add your amount of zeros
alert(x + "-" + x.length);
答案 8 :(得分:0)
Nate是我发现的最佳方式,它的阅读时间太长了。所以我为您提供了3个简单的解决方案。
<强> 1。所以这是我对Nate答案的简化。
//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.prototype.toStringMinLen = function(len) {
var zeroes = "0".repeat(len);
return zeroes.substring(self.toString().length, len) + self;
}
//Usage: tmp=42; tmp.toStringMinLen(4)
答案 9 :(得分:0)
我为此编写了一个通用函数。它以输入控件和打击垫长度作为输入。
function padLeft(input, padLength) {
var num = $("#" + input).val();
$("#" + input).val(('0'.repeat(padLength) + num).slice(-padLength));
}
答案 10 :(得分:-1)
使用String.JS librairy函数padLeft:
S('123').padLeft(5, '0').s --> 00123