Slik skriver du ut tall med ledende nuller i JavaScript

Jeg kan avrunde til x antall desimaler med math.round, men finnes det en måte å avrunde til venstre for desimalen? for eksempel 5 blir 05 hvis jeg angir 2 desimaler.

Løsning

BEMERK: Potensielt utdatert. ECMAScript 2017 inkluderer String.prototype.padStart.

Ber du om null utfylling? Ikke egentlig avrunding. Du må konvertere den til en streng siden tall ikke gir mening med ledende nuller. Noe sånt som dette...

function pad(num, size) {
    var s = num+"";
    while (s.length < size) s = "0" + s;
    return s;
}

Eller hvis du vet at du aldri vil bruke mer enn X antall nuller, kan dette være bedre. Dette forutsetter at du aldri vil ha mer enn 10 sifre.

function pad(num, size) {
    var s = "000000000" + num;
    return s.substr(s.length-size);
}

Hvis du bryr deg om negative tall, må du fjerne " - " og lese det.

Kommentarer (12)

OPPDATERING: Liten one-liner-funksjon som bruker metoden ES2017 String.prototype.padStart:

function zeroPad(num, places) {
  return String(num).padStart(places, '0')
}

console.log(zeroPad(5, 2)); // "05"
console.log(zeroPad(5, 4)); // "0005"
console.log(zeroPad(5, 6)); // "000005"
console.log(zeroPad(1234, 2)); // "1234"

En annen ES5-tilnærming:

function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
}

zeroPad(5, 2); // "05"
zeroPad(5, 4); // "0005"
zeroPad(5, 6); // "000005"
zeroPad(1234, 2); // "1234" :)
Kommentarer (5)

Bare for moro skyld (jeg hadde litt tid å drepe), en mer sofistikert implementering som bufrer nullstrengen:

pad.zeros = new Array(5).join('0');
function pad(num, len) {
    var str = String(num),
        diff = len - str.length;
    if(diff  pad.zeros.length)
        pad.zeros = new Array(diff + 1).join('0');
    return pad.zeros.substr(0, diff) + str;
}

Hvis utfyllingsantallet er stort og funksjonen kalles ofte nok, utkonkurrerer den faktisk de andre metodene ...

Kommentarer (0)