15

重複の可能性:
JavaScript を使用してゼロフィル値を作成するにはどうすればよいですか?

常に 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_digitsnumber.toString().length

于 2012-05-31T21:52:25.307 に答える
1

考えられる解決策の 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 に答える