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).

493voto

Seaux Punkte 3339

Ich kann nicht glauben, dass die Antworten hier so kompliziert sind... Nimm einfach das hier:

var zerofilled = ('0000'+n).slice(-4);

let n = 1
var zerofilled = ('0000'+n).slice(-4);
console.log(zerofilled)

362voto

Peter Bailey Punkte 103278

Hinweis an die Leser!

Wie in den Kommentaren angemerkt wurde, ist diese Lösung "clever", und da clevere Lösungen oft sind, ist sie speicherintensiv und relativ langsam. Wenn die Leistung für Sie ein Problem darstellt, sollten Sie diese Lösung nicht verwenden!

Potenziell veraltet : ECMAScript 2017 umfasst String.prototype.padStart y Number.prototype.toLocaleString ist seit ECMAScript 3.1 vorhanden. Beispiel:

var n=-0.1;
n.toLocaleString('en', {minimumIntegerDigits:4,minimumFractionDigits:2,useGrouping:false})

...wird "-0000.10" ausgegeben.

// or 
const padded = (.1+"").padStart(6,"0");
`-${padded}`

...wird "-0000.1" ausgegeben.

Eine einfache Funktion ist alles, was Sie brauchen

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
}

Sie könnten dies in eine Bibliothek einbinden, wenn Sie Namensraum oder ähnliches sparen wollen. Wie bei jQuery's erweitern .

347voto

profitehlolz Punkte 640

Einfacher Weg. Sie könnten die String-Multiplikation für das Pad hinzufügen und es in eine Funktion verwandeln.

var pad = "000000";
var n = '5';
var result = (pad+n).slice(-pad.length);

Als Funktion,

function paddy(num, padlen, padchar) {
    var pad_char = typeof padchar !== 'undefined' ? padchar : '0';
    var pad = new Array(1 + padlen).join(pad_char);
    return (pad + num).slice(-pad.length);
}
var fu = paddy(14, 5); // 00014
var bar = paddy(2, 4, '#'); // ###2

119voto

coderjoe Punkte 10951

Ich musste mir vor kurzem etwas Ähnliches einfallen lassen. Ich dachte mir, dass es einen Weg geben muss, es ohne Schleifen zu machen.

Das habe ich mir ausgedacht.

function zeroPad(num, numZeros) {
    var n = Math.abs(num);
    var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
    var zeroString = Math.pow(10,zeros).toString().substr(1);
    if( num < 0 ) {
        zeroString = '-' + zeroString;
    }

    return zeroString+n;
}

Dann verwenden Sie es einfach als Zahlenkreuz:

> zeroPad(50,4);
"0050"

Wenn die Zahl größer ist als der Füllbereich, wird die Zahl über den Füllbereich hinaus erweitert:

> zeroPad(51234, 3);
"51234"

Dezimalzahlen sind auch in Ordnung!

> zeroPad(51.1234, 4);
"0051.1234"

Wenn es Ihnen nichts ausmacht, den globalen Namespace zu verschmutzen, können Sie ihn direkt zu Number hinzufügen:

Number.prototype.leftZeroPad = function(numZeros) {
    var n = Math.abs(this);
    var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
    var zeroString = Math.pow(10,zeros).toString().substr(1);
    if( this < 0 ) {
        zeroString = '-' + zeroString;
    }

    return zeroString+n;
}

Und wenn Sie es vorziehen, dass Dezimalzahlen Platz in der Füllung einnehmen:

Number.prototype.leftZeroPad = function(numZeros) {
    var n = Math.abs(this);
    var zeros = Math.max(0, numZeros - n.toString().length );
    var zeroString = Math.pow(10,zeros).toString().substr(1);
    if( this < 0 ) {
        zeroString = '-' + zeroString;
    }

    return zeroString+n;
}

Zum Wohl!



XDR kam mit eine logarithmische Veränderung die besser zu funktionieren scheint.

WARNUNG : Diese Funktion schlägt fehl, wenn num gleich Null ist (z. B. zeropad(0, 2))

function zeroPad (num, numZeros) {
    var an = Math.abs (num);
    var digitCount = 1 + Math.floor (Math.log (an) / Math.LN10);
    if (digitCount >= numZeros) {
        return num;
    }
    var zeroString = Math.pow (10, numZeros - digitCount).toString ().substr (1);
    return num < 0 ? '-' + zeroString + an : zeroString + an;
}

Apropos Leistung, tomsmeding die 3 besten Antworten verglichen ( 4 mit der logarithmischen Variation ). Raten Sie mal, welche hauptsächlich besser als die beiden anderen? :)

90voto

Sterling Archer Punkte 21308

Moderne Browser unterstützen jetzt padStart können Sie jetzt einfach tun:

string.padStart(maxLength, "0");

Ejemplo:

string = "14";
maxLength = 5; // maxLength is the max string length, not max # of fills
res = string.padStart(maxLength, "0");
console.log(res); // prints "00014"

number = 14;
maxLength = 5; // maxLength is the max string length, not max # of fills
res = number.toString().padStart(maxLength, "0");
console.log(res); // prints "00014"

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