我必须输出一个必须始终有 3 位数字的天数。而不是3它必须写003,而不是12它必须写012。如果大于100则不格式化输出。我想知道是否有我可以使用的正则表达式或一些快速的内联脚本,或者我必须创建一个应该这样做并返回结果的函数。谢谢!
问问题
28805 次
6 回答
34
怎么样:
zeroFilled = ('000' + x).substr(-3)
对于任意宽度:
zeroFilled = (new Array(width).join('0') + x).substr(-width)
根据评论,这似乎更准确:
lpad = function(s, width, char) {
return (s.length >= width) ? s : (new Array(width).join(char) + s).slice(-width);
}
于 2012-05-31T21:54:14.290 回答
6
我在 Samuel Mullen的博客上找到了一个优雅的解决方案。我只是优化了zeroes
创作。
function lpad(value, padding) {
var zeroes = new Array(padding+1).join("0");
return (zeroes + value).slice(-padding);
}
用法:lpad(12, 3)
导致"012"
于 2012-05-31T21:57:16.990 回答
1
这是一个简单的函数,它用零填充一个数字到一定的宽度:
function zeroFill(number, width) {
width -= number.toString().length;
if(width > 0) {
return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
}
return number + ""; // always return a string
}
(来自如何用前导零填充值?)
由于原始答案没有解释该功能的工作原理,我将在这里进行。
width
最初包含您想要的总长度,因此width - number_of_digits
是必要的填充字符数。
new Array(len + 1).join(str)
重复str
len
几次。
正则表达式用于在数字包含小数点的情况下添加额外的填充零,因为该点也包含在number_of_digits
确定的使用中number.toString().length
于 2012-05-31T21:52:25.307 回答
1
于 2012-05-31T21:53:52.827 回答
1
你可以这样做...
("00" + day).slice(-3)
它会在前面加上零,然后.slice()
总是给你字符串的最后 3 个值。
于 2012-05-31T21:54:39.703 回答
1
我会编写以下函数:
var pad = function(n, length) {
var str = "" + n;
if(str.length < length) str = new Array(length - str.length).join("0") + str;
return str;
};
于 2012-05-31T21:55:28.243 回答