15

可能重复:
如何使用 JavaScript 创建 Zerofilled 值?

我必须输出一个必须始终有 3 位数字的天数。而不是3它必须写003,而不是12它必须写012。如果大于100则不格式化输出。我想知道是否有我可以使用的正则表达式或一些快速的内联脚本,或者我必须创建一个应该这样做并返回结果的函数。谢谢!

4

6 回答 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

一种可能的解决方案:

​while ((val+"").length < 3​) {
    val = "0" + val;
}

演示:http: //jsfiddle.net/WfXVn/

于 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 回答