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);}
