JavaScript 格式编号,始终为 3 位数字

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10841773/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 03:11:22  来源:igfitidea点击:

JavaScript format number to day with always 3 digits

javascriptnumbersformatdigitsdays

提问by ali

Possible Duplicate:
How can I create a Zerofilled value using JavaScript?

可能的重复:
如何使用 JavaScript 创建一个 Zerofill 值?

I have to output a day number that must always have 3 digits. Instead of 3it must write 003, instead of 12it must write 012. If it is greater than 100output it without formatting. I wonder if there's a regex that I could use or some quick in-line script, or I must create a function that should do that and return the result. Thanks!

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

回答by georg

How about:

怎么样:

 zeroFilled = ('000' + x).substr(-3)

For arbitrary width:

对于任意宽度:

 zeroFilled = (new Array(width).join('0') + x).substr(-width)

As per comments, this seems more accurate:

根据评论,这似乎更准确:

lpad = function(s, width, char) {
    return (s.length >= width) ? s : (new Array(width).join(char) + s).slice(-width);
}

回答by Mattias Buelens

I found an elegant solution by Samuel Mullen on his blog. I simply optimized the zeroescreation.

我在 Samuel Mullen的博客上找到了一个优雅的解决方案。我只是优化了zeroes创作。

function lpad(value, padding) {
    var zeroes = new Array(padding+1).join("0");
    return (zeroes + value).slice(-padding);
}

Usage: lpad(12, 3)results in "012"

用法:lpad(12, 3)结果"012"

回答by Mattias Buelens

You can do this...

你可以这样做...

("00" + day).slice(-3)

It'll prepend the zeros, and then .slice()will always give you the last 3 values of the string.

它会在前面加上零,然后.slice()总是给你字符串的最后 3 个值。

回答by Samuel Rossille

I would write the following function:

我会编写以下函数:

var pad = function(n, length) {
    var str = "" + n;
    if(str.length < length) str = new Array(length - str.length).join("0") + str;
    return str;
};

回答by ThiefMaster

Here is a simple function that pads a number with zeroes to a certain width:

这是一个简单的函数,它用零填充一个数字到一定的宽度:

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
}

(from How can I pad a value with leading zeros?)

(来自如何用前导零填充值?

Since the original answer did not explain how the function works I'll do it here.

由于原始答案没有解释该函数的工作原理,我将在这里进行。

widthinitially contains the total length you want, so width - number_of_digitsis the number of padding chars necessary.
new Array(len + 1).join(str)repeats strlentimes.
The regex is used to add an additional padding zero in case of a number containing a decimal point since the point was also included in the number_of_digitsdetermined using number.toString().length

width最初包含您想要的总长度,因此width - number_of_digits需要填充字符的数量。
new Array(len + 1).join(str)重复strlen次数。
正则表达式用于在包含小数点的数字的情况下添加额外的填充零,因为该点也包含在number_of_digits确定的使用中number.toString().length

回答by VisioN

One possible solution:

一种可能的解决方案:

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

DEMO:http://jsfiddle.net/WfXVn/

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