¿Cómo generar números con ceros a la izquierda en JavaScript? [duplicar]

Resuelto chris asked hace 14 años • 6 respuestas

¿Hay alguna manera de anteponer ceros a la izquierda de los números para que resulte en una cadena de longitud fija? Por ejemplo, 5se convierte "05"si especifico 2 lugares.

chris avatar Jun 08 '10 22:06 chris
Aceptado

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.

InfinitiesLoop avatar Jun 08 '2010 15:06 InfinitiesLoop

ACTUALIZACIÓN: Pequeña función de una sola línea utilizando el String.prototype.padStartmé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"
Expandir fragmento

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" :)
Christian C. Salvadó avatar Jun 08 '2010 15:06 Christian C. Salvadó

Podrías extender el Numberobjeto:

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"
Mild Fuzz avatar Jun 25 '2012 10:06 Mild Fuzz

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"
}
dave1010 avatar Aug 31 '2011 07:08 dave1010