¿Cómo generar números con ceros a la izquierda en JavaScript? [duplicar]
¿Hay alguna manera de anteponer ceros a la izquierda de los números para que resulte en una cadena de longitud fija? Por ejemplo, 5
se convierte "05"
si especifico 2 lugares.
NOTA : Potencialmente desactualizado. ECMAScript 2017 incluye
String.prototype.padStart
.
Tendrás que convertir el número en una cadena ya que los números no tienen sentido con ceros a la izquierda. Algo como esto:
function pad(num, size) {
num = num.toString();
while (num.length < size) num = "0" + num;
return num;
}
O, si sabe que nunca usaría más de X ceros, esto podría ser mejor. Esto supone que nunca querrás más de 10 dígitos.
function pad(num, size) {
var s = "000000000" + num;
return s.substr(s.length-size);
}
Si te importan los números negativos, tendrás que quitarlos -
y leerlos.
ACTUALIZACIÓN: Pequeña función de una sola línea utilizando el String.prototype.padStart
método ES2017:
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"
Otro enfoque de ES5:
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" :)
Podrías extender el Number
objeto:
Number.prototype.pad = function(size) {
var s = String(this);
while (s.length < (size || 2)) {s = "0" + s;}
return s;
}
Ejemplos:
(9).pad(); //returns "09"
(7).pad(3); //returns "007"
De https://gist.github.com/1180489
function pad(a, b){
return(1e15 + a + '').slice(-b);
}
Con comentarios:
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"
}