tekstformatering - Hvordan skrive ut tall med ledende nuller i JavaScript?


Finnes det en måte å legge til ledende nuller til tall slik at det resulterer i en streng med fast lengde? For eksempel blir 5 til "05" hvis jeg spesifiserer 2 plasser.

Svar #1

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

Du må konvertere tallet til en streng siden tall ikke gir mening med ledende nuller. Noe sånt som dette:

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

Eller, hvis du vet at du aldri vil bruke mer enn X antall nuller, kan dette være bedre. Dette antar 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 legge det til igjen.

Svar #2

OPPDATERING: Liten en-linjers funksjon som bruker ES2017 String.prototype.padStart-metoden:

const zeroPad = (num, places) => 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" :)

Svar #3

Du kunne utvide Number-objektet:

Number.prototype.pad = function(size) {
    var s = String(this);
    while (s.length < (size || 2)) {s = "0" + s;}
    return s;
}

Eksempler:

(9).pad();  //returns "09"

(7).pad(3);  //returns "007"

Svar #4

Fra https://gist.github.com/1180489

function pad(a, b){
  return(1e15 + a + '').slice(-b);
}

Med kommentarer:

function pad(
  a, // the number to convert 
  b // number of resulting characters
){
  return (
    1e15 + a + // combine with large number
    "" // convert to string
  ).slice(-b) // cut leading "1"
}

Svar #5

function zfill(num, len) {return (Array(len).join("0") + num).slice(-len);}

Relaterte artikler