584 Stimmen

Wie kann ich einen Wert mit führenden Nullen auffüllen?

Was ist der empfohlene Weg, um einen Wert in JavaScript mit Nullen zu füllen? Ich kann mir vorstellen, dass ich eine benutzerdefinierte Funktion zum Auffüllen von Nullen auf einen eingegebenen Wert bauen könnte, aber ich frage mich, ob es einen direkteren Weg gibt, dies zu tun?

Anmerkung: Mit "zerofilled" meine ich es im Sinne des Wortes in der Datenbank (wo eine 6-stellige zerofilled Darstellung der Zahl 5 "000005" wäre).

87voto

chetbox Punkte 1562

Das habe ich verwendet, um eine Zahl auf bis zu 7 Zeichen aufzufüllen.

("0000000" + number).slice(-7)

Dieser Ansatz wird wahrscheinlich für die meisten Menschen ausreichen.

Edit: Wenn Sie es allgemeiner gestalten wollen, können Sie dies tun:

("0".repeat(padding) + number).slice(-padding)

Bearbeiten 2: Beachten Sie, dass seit ES2017 können Sie verwenden String.prototype.padStart :

number.toString().padStart(padding, "0")

33voto

Daniel Barbalace Punkte 1149

Leider gibt es eine Menge unnötig komplizierter Vorschläge für dieses Problem, die in der Regel das Schreiben einer eigenen Funktion zur mathematischen oder String-Manipulation oder den Aufruf eines Dienstprogramms eines Drittanbieters beinhalten. Es gibt jedoch eine Standardmethode, dies in der JavaScript-Basisbibliothek mit nur einer Zeile Code zu tun. Es könnte sich lohnen, diese eine Codezeile in eine Funktion zu verpacken, um zu vermeiden, dass Sie Parameter angeben müssen, die Sie nie ändern wollen, wie den lokalen Namen oder den Stil.

var amount = 5;

var text = amount.toLocaleString('en-US',
{
    style: 'decimal',
    minimumIntegerDigits: 3,
    useGrouping: false
});

Dies ergibt den Wert "005" für Text. Sie können auch die Funktion toLocaleString von Number verwenden, um Nullen auf der rechten Seite des Dezimalpunkts einzufügen.

var amount = 5;

var text = amount.toLocaleString('en-US',
{
    style: 'decimal',
    minimumFractionDigits: 2,
    useGrouping: false
});

Dies ergibt den Wert "5.00" für Text. Ändern Sie useGrouping auf true, um Komma-Trennzeichen für Tausender zu verwenden.

Beachten Sie, dass die Verwendung von toLocaleString() con locales y options Argumente ist in ECMA-402 separat genormt nicht in ECMAScript. Ab heute sind einige Browser nur die Basisunterstützung umsetzen d.h. toLocaleString() kann alle Argumente ignorieren.

Vollständiges Beispiel

21voto

jfriend00 Punkte 632952

Wenn im Voraus bekannt ist, dass die Füllmenge einen bestimmten Wert nicht überschreiten darf, gibt es eine andere Möglichkeit, dies ohne Schleifen zu tun:

var fillZeroes = "00000000000000000000";  // max number of zero fill ever asked for in global

function zeroFill(number, width) {
    // make sure it's a string
    var input = number + "";  
    var prefix = "";
    if (input.charAt(0) === '-') {
        prefix = "-";
        input = input.slice(1);
        --width;
    }
    var fillAmt = Math.max(width - input.length, 0);
    return prefix + fillZeroes.slice(0, fillAmt) + input;
}

Testfälle hier: http://jsfiddle.net/jfriend00/N87mZ/

20voto

Der schnelle und schmutzige Weg:

y = (new Array(count + 1 - x.toString().length)).join('0') + x;

Für x = 5 und count = 6 ergibt sich y = "000005".

17voto

juFo Punkte 16511

ECMAScript 2017: verwenden padStart o padEnd

'abc'.padStart(10);         // "       abc"
'abc'.padStart(10, "foo");  // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"

Mehr Informationen:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X