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

kztd Punkte 2423

Posting, falls Sie danach suchen, konvertiert die verbleibende Zeit in Millisekunden in eine Zeichenkette wie 00:04:21

function showTimeRemaining(remain){
  minute = 60 * 1000;
  hour = 60 * minute;
  //
  hrs = Math.floor(remain / hour);
  remain -= hrs * hour;
  mins = Math.floor(remain / minute);
  remain -= mins * minute;
  secs = Math.floor(remain / 1000);
  timeRemaining = hrs.toString().padStart(2, '0') + ":" + mins.toString().padStart(2, '0') + ":" + secs.toString().padStart(2, '0');
  return timeRemaining;
}

1voto

Scott Means Punkte 552

Ok, ok, ich kann nicht glauben, dass ich mir die Mühe mache, einen Antrag zu stellen. eine andere Antwort auf diese Frage, aber ich denke, mein Ansatz ist ein wenig anders. Der Grund, warum ich eine Zahl auffüllen musste, war, dass ich sie in einem <pre> Element (Teil eines Bildschirmprotokolls), so dass es letztendlich sowieso eine Zeichenfolge sein wird. Anstatt zu rechnen, habe ich eine einfache Funktion geschrieben, um einen Zeichenfolgenwert über eine Maskenzeichenfolge zu legen:

function overlayr(m, s) {
  return m.length > s.length ? m.substr(0, m.length - s.length) + s : s;
}

Das hat den Vorteil, dass ich es für alle möglichen Aufgaben der Zeichenfolgenausrichtung verwenden kann. Um es aufzurufen, geben Sie einfach die Maske und die Nummer als String ein:

> overlayr('00000', (5).toString())
< "00005"

Ein zusätzlicher Bonus ist die korrekte Behandlung von Überläufen:

> overlayr('00000', (555555).toString())
< "555555"

Und natürlich ist es nicht auf 0 Polsterung beschränkt:

> overlayr('*****', (55).toString())
< "***55"

1voto

Ilja KO Punkte 1164

Ich habe keine Antwort in diesem Formular gesehen, also hier mein Versuch mit Regex und String-Manipulation

(Funktioniert auch für negativ y dezimal Zahlen)

Code :

function fillZeroes(n = 0, m = 1) {
  const p = Math.max(1, m);
  return String(n).replace(/\d+/, x => '0'.repeat(Math.max(p - x.length, 0)) + x);
}

Einige Ergebnisse:

console.log(fillZeroes(6, 2))          // >> '06'
console.log(fillZeroes(1.35, 2))       // >> '01.35'
console.log(fillZeroes(-16, 3))        // >> '-016'
console.log(fillZeroes(-1.456, 3))     // >> '-001.456'
console.log(fillZeroes(-456.53453, 6)) // >> '-000456.53453'
console.log(fillZeroes('Agent 7', 3))  // >> 'Agent 007'

1voto

Molimat Punkte 56

Ein alberner rekursiver Weg ist:

function paddingZeros(text, limit) {
  if (text.length < limit) {
    return paddingZeros("0" + text, limit);
  } else {
    return text;
  }
}

wobei der Grenzwert die gewünschte Größe der Zeichenkette angibt.

Ex: appendZeros("7829", 20) // 00000000000000007829

1voto

Lucas Ferreira Punkte 1

Mein kleiner Beitrag zu diesem Thema ( https://gist.github.com/lucasferreira/a881606894dde5568029 ):

/* Autor: Lucas Ferreira - http://blog.lucasferreira.com | Usage: fz(9) or fz(100, 7) */
function fz(o, s) {
    for(var s=Math.max((+s||2),(n=""+Math.abs(o)).length); n.length<s; (n="0"+n));
    return (+o < 0 ? "-" : "") + n;
};

Verwendung:

fz(9) & fz(9, 2) == "09"
fz(-3, 2) == "-03"
fz(101, 7) == "0000101"

Ich weiß, es ist eine ziemlich schmutzige Funktion, aber sie ist schnell und funktioniert auch mit negativen Zahlen ;)

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