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

0voto

Julian Mann Punkte 5717

Ich wollte nur anmerken (aber ich habe nicht genug Punkte), dass die am höchsten bewertete Antwort bei negativen Zahlen und Dezimalzahlen versagt

function padNumber(n,pad) {
    p = Math.pow(10,pad);
    a = Math.abs(n);
    g = (n<0);
    return (a < p) ?  ((g ? '-' : '') + (p+a).toString().substring(1)) : n;
}

padNumber( -31.235, 5);

"-00031.235"

0voto

Case Punkte 4092

Eine einfache und elegante Lösung, wobei n die Zahl und l die Länge ist.

function nFill (n, l) {return (l>n.toString().length)?((Array(l).join('0')+n).slice(-l)):n;}

Dadurch wird die Länge beibehalten, wenn sie zu groß ist, um die Zahl nicht zu verändern.

n = 500;

console.log(nFill(n, 5));
console.log(nFill(n, 2));

function nFill (n, l) {return (l>n.toString().length)?((Array(l).join('0')+n).slice(-l)):n;}

0voto

Adam Whateverson Punkte 634

Ich habe 2 Lösungen. Die erste ist die wirklich einfache, um eine Zahl mit Nullen schlecht zu machen, wenn Sie wissen, dass das alles ist, was Sie schnell tun wollen.

Bei der zweiten werden auch negative Zahlen aufgefüllt - genau wie bei der "cleveren" Lösung, die anscheinend die beste Punktzahl hat.

Also los:

// One liner simple mode!
// (always ensure the number is 6 digits long knowing its never negative)
var mynum = 12;
var mynum2 = "0".repeat((n=6-mynum.toString().length)>0?n:0)+mynum;
alert("One liner to pad number to be 6 digits long = Was "+mynum+" Now "+mynum2);

// As a function which will also pad negative numbers
// Yes, i could do a check to only take "-" into account
// if it was passed in as an integer and not a string but
// for this, i haven't.
// 
// @s The string or integer to pad
// @l The minumum length of @s
// @c The character to pad with
// @return updated string
function padme(s,l,c){
    s = s.toString();
    c = c.toString();
    m = s.substr(0,1)=="-";
    return (m?"-":"")+c.repeat((n=l-(s.length-(m?1:0)))>0?n:0)+s.substr((m?1:0));
}
alert("pad -12 to ensure it is 8 digits long = "+padme(-12,8,0));
alert("pad 'hello' with 'x' to ensure it is 12 digits long = "+padme('hello',12,'x'));

0voto

KthProg Punkte 1890

Mein Beitrag:

Ich nehme an, Sie wollen, dass die Gesamtlänge der Zeichenfolge den "Punkt" einschließt. Wenn nicht, ist es immer noch einfach umzuschreiben, um eine zusätzliche Null hinzuzufügen, wenn die Zahl ein Float ist.

padZeros = function (num, zeros) {
        return (((num < 0) ? "-" : "") + Array(++zeros - String(Math.abs(num)).length).join("0") + Math.abs(num));
    }

0voto

Atmask Punkte 78

Hier eine kleine Array-Lösung innerhalb einer zweizeiligen Funktion. Sie prüft auch, ob die führenden Nullen kleiner sind als die Länge der Zahlenfolge.

function pad(num, z) {
    if (z < (num = num + '').length) return num;
    return Array(++z - num.length).join('0') + num;
}

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