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

-1voto

zenril Punkte 190
function numPadding (padding,i) {
    return padding.substr(0, padding.length - (Math.floor(i).toString().length)) + Math.floor(i );
}

numPadding("000000000",234); -> "000000234"

oder

function numPadding (number, paddingChar,i) {
    var padding = new Array(number + 1).join(paddingChar);
    return padding.substr(0, padding.length - (Math.floor(i).toString().length)) + Math.floor(i );
}

numPadding(8 ,"0", 234); -> "00000234";

-1voto

dtudury Punkte 593

War hier auf der Suche nach einem Standard. hatte die gleiche Idee wie Paul und Jonathan... ihre sind super süß, hier ist eine furchtbar-süße Version:

function zeroPad(n,l,i){
    return (i=n/Math.pow(10,l))*i>1?''+n:i.toFixed(l).replace('0.','');
}

funktioniert auch (wir gehen von ganzen Zahlen aus, ja?)...

> zeroPad(Math.pow(2, 53), 20);
'00009007199254740992'
> zeroPad(-Math.pow(2, 53), 20);
'-00009007199254740992'
> zeroPad(Math.pow(2, 53), 10);
'9007199254740992'
> zeroPad(-Math.pow(2, 53), 10);
'-9007199254740992'

-1voto

Unsere Tests waren gefälscht, weil mein Test einen Tippfehler enthielt.

zeroPad = function (num, count) {
    return ((num / Math.pow(10, count)) + '').substr(2);
};

Pauls ist der schnellste, aber ich denke, .substr ist schneller als .slice, auch wenn es ein Zeichen mehr ist ;)

-1voto

matpop Punkte 1870
function uint_zerofill(num, width) {
    var pad = ''; num += '';
    for (var i = num.length; i < width; i++)
        pad += '0';
    return pad + num;
}

-2voto

CuleroConnor Punkte 37

Mnah... Ich habe keine "ultimative" Antwort auf dieses Problem gesehen und wenn Sie vor der gleichen Herausforderung stehen, muss ich Ihnen etwas Zeit sparen, indem ich sage, dass es leider keine eingebaute Funktion dafür in JavaScript gibt; aber es gibt diese geniale Funktion in PHP, die eine großartige Arbeit auf Padding Strings sowie Zahlen mit einzelnen Zeichen oder beliebige Strings so nach einiger Zeit der Schlag meinen Kopf für nicht das richtige Werkzeug auf JS [meist für zerofillin 'Zahlen und in der Regel für Trimmen Strings, um eine feste Länge passen] und übermäßige Codierung Arbeit beschloss ich, meine eigene Funktion, die das gleiche tut zu schreiben ["fast das gleiche", lesen Sie weiter für Details], dass die Traum-PHP-Funktion, sondern in komfortablen Client-Side JavaScript.

function str_pad(input,pad_length,pad_string,pad_type){
    var input=input.toString();
    var output="";
    if((input.length>pad_length)&&(pad_type=='STR_PAD_RIGHT')){var output=input.slice(0,pad_length);}
    else if((input.length>pad_length)&&(pad_type=='STR_PAD_LEFT')){var output=input.slice(input.length-pad_length,input.length);}
    else if((input.length<pad_length)&&(pad_type=='STR_PAD_RIGHT')){
        var caracteresNecesarios=pad_length-input.length;
        var rellenoEnteros=Math.floor(caracteresNecesarios/pad_string.length);
        var rellenoParte=caracteresNecesarios%pad_string.length;
        var output=input;
        for(var i=0;i<rellenoEnteros;i++){var output=output+pad_string;};
        var output=output+pad_string.slice(0,rellenoParte);
    }
    else if((input.length<pad_length)&&(pad_type=='STR_PAD_LEFT')){
        var caracteresNecesarios=pad_length-input.length;
        var rellenoEnteros=Math.floor(caracteresNecesarios/pad_string.length);
        var rellenoParte=caracteresNecesarios%pad_string.length;
        var output="";
        for(var i=0;i<rellenoEnteros;i++){var output=output+pad_string;};
        var output=output+pad_string.slice(0,rellenoParte);
        var output=output+input;
    }
    else if(input.length==pad_length){var output=input;};
    return output;
};

Das einzige, was meine Funktion nicht tut, ist die STR_PAD_BOTH Verhalten, das ich mit etwas Zeit und einer bequemeren Tastatur hinzufügen könnte. Rufen Sie die Funktion auf und testen Sie sie; ich wette, Sie werden sie lieben, wenn es Sie nicht stört, dass der innere Code ein oder zwei Wörter auf Spanisch verwendet... keine große Sache, denke ich. Ich habe keine Kommentare hinzugefügt, um meinen Code mit einem "Wasserzeichen" zu versehen, so dass Sie ihn nahtlos in Ihrer Arbeit verwenden können, und ich habe den Code auch nicht komprimiert, um die Lesbarkeit zu verbessern. Verwenden Sie ihn und testen Sie ihn so und den Code verbreiten :

alert("str_pad('murcielago',20,'123','STR_PAD_RIGHT')="+str_pad('murcielago',20,'123','STR_PAD_RIGHT')+'.');

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