Come formattare i numeri anteponendo 0 ai numeri a una cifra?


Risposte:


594

Il metodo migliore che ho trovato è simile al seguente:

(Nota che questa versione semplice funziona solo con numeri interi positivi)

var myNumber = 7;
var formattedNumber = ("0" + myNumber).slice(-2);
console.log(formattedNumber);

Per i decimali, potresti usare questo codice (è un po 'sciatto).

var myNumber = 7.5;
var dec = myNumber - Math.floor(myNumber);
myNumber = myNumber - dec;
var formattedNumber = ("0" + myNumber).slice(-2) + dec.toString().substr(1);
console.log(formattedNumber);

Infine, se hai a che fare con la possibilità di numeri negativi, è meglio memorizzare il segno, applicare la formattazione al valore assoluto del numero e riapplicare il segno dopo il fatto. Si noti che questo metodo non limita il numero a 2 cifre totali. Invece limita solo il numero a sinistra del decimale (la parte intera). (La riga che determina il segno è stata trovata qui ).

var myNumber = -7.2345;
var sign = myNumber?myNumber<0?-1:1:0;
myNumber = myNumber * sign + ''; // poor man's absolute value
var dec = myNumber.match(/\.\d+$/);
var int = myNumber.match(/^[^\.]+/);

var formattedNumber = (sign < 0 ? '-' : '') + ("0" + int).slice(-2) + (dec !== null ? dec : '');
console.log(formattedNumber);


4
@KeithPower quella demo non illustra questo
Joseph Marikle,

1
@KeithPower Ecco una demo che illustra il metodo sopra: jsfiddle.net/bkTX3 . Fai clic sulla casella, modifica il valore e fai clic sulla casella per vederlo in azione.
Joseph Marikle,

1
@Joseph .75 viene trasformato nel 75.
Galled

@Galled normalmente quel genere di cose non è necessario con questa forma di formattazione nella mia esperienza, ma ho messo insieme una modifica che coprirebbe quello scenario.
Joseph Marikle,

Dai un'occhiata anche al .toPrecision()metodo w3schools.com/jsref/jsref_toprecision.asp
Oleg

133

Se il numero è maggiore di 9, converti il ​​numero in una stringa (coerenza). Altrimenti, aggiungi uno zero.

function n(n){
    return n > 9 ? "" + n: "0" + n;
}

n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"

4
che dire del tempo negativo però. 0-1: 20: 00
mjwrazor

131

Utilizzare il metodo toLocaleString () in qualsiasi numero. Quindi per il numero 6, come mostrato di seguito, puoi ottenere i risultati desiderati.

(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})

Genera la stringa '06'.


17
Questo è decisamente meglio che tagliare le corde a mano. Più sinteticamente, e se la tua pagina potrebbe essere utilizzata al di fuori degli Stati Uniti, potresti voler modificare questo per:(6).toLocaleString(undefined, {minimumIntegerDigits: 2})
Mark Slater il

2
L'utilizzo di questo con IE 9 crea 6.00 invece di 06.
Drew

1
Funziona, ma hai bisogno di IE> = 11.
Saftpresse99,

o con intl.js polyfil
maxisam,

2
Sono pronto per ignorare IE, ma non è ben supportato nei browser mobili. src: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
chetan92

50

Ecco una semplice funzione di imbottitura numerica che utilizzo di solito. Permette qualsiasi quantità di imbottitura.

function leftPad(number, targetLength) {
    var output = number + '';
    while (output.length < targetLength) {
        output = '0' + output;
    }
    return output;
}

Esempi:

leftPad(1, 2) // 01
leftPad(10, 2) // 10
leftPad(100, 2) // 100
leftPad(1, 3) // 001
leftPad(1, 8) // 00000001

ha anche problemi con tempi negativi. C'è una correzione per questo?
mjwrazor,

39

In tutti i browser moderni è possibile utilizzare

numberStr.padStart(2, "0");

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

function zeroPad(numberStr) {
  return numberStr.padStart(2, "0");
}

var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

numbers.forEach(
  function(num) {
    var numString = num.toString();
    
    var paddedNum = zeroPad(numString);

    console.log(paddedNum);
  }
);


1
Ricorda che questo non è supportato in IE in tutti gli sviluppatori.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Tim

Inoltre non funziona in alcune versioni precedenti del nodo (forse qualcosa di più vecchio del nodo 8)
JSilv

20

La risposta di @ Lifehack mi è stata molto utile; dove penso che possiamo farlo in una riga per numeri positivi

 String(input).padStart(2, '0');

12
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);

1
Penso che volevi dire il seguente per ottenere il giorno del mese:("0" + (date.getDate())).slice(-2);
Jeff Moeller,

11

Tu puoi fare:

function pad2(number) {
   return (number < 10 ? '0' : '') + number
}

Esempio:

document.write(pad2(0) + '<br />');
document.write(pad2(1) + '<br />');
document.write(pad2(2) + '<br />');
document.write(pad2(10) + '<br />');
document.write(pad2(15) + '<br />');

Risultato:

00
01
02
10
15

8

Sembra che potresti avere una stringa, anziché un numero. Usa questo:

var num = document.getElementById('input').value,
    replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;

Ecco un esempio: http://jsfiddle.net/xtgFp/


7

Una fodera veloce e sporca ....

function zpad(n, len) {
  return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}

1
Lavoro eccellente. È meglio usarlo come metodo di estensione come questo:Number.prototype.leftPad = String.prototype.leftPad = function (pad) { return 0..toFixed(pad).slice(2, -this.toString().length) + this.toString(); };
ConducedClever

6

Questo è semplice e funziona abbastanza bene:

function twoDigit(number) {
  var twodigit = number >= 10 ? number : "0"+number.toString();
  return twodigit;
}

1
può essere scritto come: numero di ritorno> = 10? numero: "0" + numero.toString ();
apfz,

6

Ecco una soluzione molto semplice che ha funzionato bene per me.

Dichiara innanzitutto una variabile per contenere il tuo numero.

var number;

Ora converti il ​​numero in una stringa e mantienilo in un'altra variabile;

var numberStr = number.toString();

Ora puoi testare la lunghezza di questa stringa, se è meno del desiderato puoi aggiungere uno 'zero' all'inizio.

if(numberStr.length < 2){
      number = '0' + number;
}

Ora usa il numero come desiderato

console.log(number);

6

Ecco la soluzione più semplice che ho trovato: -

let num = 9; // any number between 0 & 99
let result = ( '0' + num ).substr( -2 );

5

Versione migliorata della risposta precedente

function atLeast2Digit(n){
    n = parseInt(n); //ex. if already passed '05' it will be converted to number 5
    var ret = n > 9 ? "" + n: "0" + n;
    return ret;
}

alert(atLeast2Digit(5));


5

So che questo è un post antico, ma volevo fornire un'opzione di soluzione OO più flessibile.

Ho estrapolato un po 'la risposta accettata e ho esteso l' Numberoggetto javascript per consentire il riempimento zero regolabile:

Number.prototype.zeroPad = function(digits) {
  var loop = digits;
  var zeros = "";
  while (loop) {
    zeros += "0";
    loop--;
  }
  return (this.toString().length > digits) ?
    this.toString() : (zeros + this).slice(-digits);
}
var v = 5;
console.log(v.zeroPad(2)); // returns "05"
console.log(v.zeroPad(4)); // returns "0005"

Modifica: aggiungi il codice per evitare di tagliare numeri più lunghi delle cifre richieste.

NOTA: questo è obsoleto in tutti tranne IE. Usa padStart()invece.


4

Non esiste un formattatore di numeri integrato per JavaScript, ma ci sono alcune librerie che lo realizzano:

  1. underscore.string fornisce una funzione sprintf (insieme a molti altri formattatori utili)
  2. javascript-sprintf , da cui underscore.string prende in prestito.

3

o

function zpad(n,l){
   return rep(l-n.toString().length, '0') + n.toString();
}

con

function rep(len, chr) { 
   return new Array(len+1).join(chr);
}

3

Se si desidera limitare le cifre contemporaneamente:

function pad2(number) {
  number = (number < 10 ? '0' : '') + number;
  number = number.substring(0,2);
  return number;
}

Ciò taglierebbe anche qualsiasi valore che superi le due cifre. Ho esteso questo alla soluzione di Fanaur.


2
<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                $('#test').keypress(allowOnlyTwoPositiveDigts);
            });

            function allowOnlyTwoPositiveDigts(e){

                var test = /^[\-]?[0-9]{1,2}?$/
                return test.test(this.value+String.fromCharCode(e.which))
            }

        </script>
    </head>
    <body>
        <input id="test" type="text" />
    </body>
</html>

2

Ecco una semplice soluzione ricorsiva che funziona per qualsiasi numero di cifre.

function numToNDigitStr(num, n)
{
    if(num >=  Math.pow(10, n - 1)) { return num; }
    return "0" + numToNDigitStr(num, n-1);
}

2

Se non hai lodash nel tuo progetto, sarà eccessivo aggiungere l'intera libreria solo per usare una funzione. Questa è la soluzione più sofisticata del tuo problema che abbia mai visto.

_.padStart(num, 2, '0')

1

Ecco la mia versione. Può essere facilmente adattato ad altri scenari.

function setNumericFormat(value) {
    var length = value.toString().length;
    if (length < 4) {
        var prefix = "";
        for (var i = 1; i <= 4 - length; i++) {
            prefix += "0";
        }
        return prefix + value.toString();
    }
    return  value.toString();
}

1
    function colorOf(r,g,b){
  var f = function (x) {
    return (x<16 ? '0' : '') + x.toString(16) 
  };

  return "#" +  f(r) + f(g) + f(b);
}

Dovresti considerare di aggiungere un po 'di contesto, non solo il codice alle tue risposte.
Mike,

1

Per chi vuole avere differenze di tempo e avere risultati che possono prendere numeri negativi qui è buono. pad (3) = "03", pad (-2) = "-02", pad (-234) = "-234"

pad = function(n){
  if(n >= 0){
    return n > 9 ? "" + n : "0" + n;
  }else{
    return n < -9 ? "" + n : "-0" + Math.abs(n);
  }
}

1

con questa funzione è possibile stampare con qualsiasi n cifra desiderata

function frmtDigit(num, n) {
    isMinus = num < 0;
    if (isMinus)
        num *= -1;
    digit = '';
    if (typeof n == 'undefined')
        n = 2;//two digits
    for (i = 1; i < n; i++) {
        if (num < (1 + Array(i + 1).join("0")))
            digit += '0';
    }
    digit = (isMinus ? '-' : '') + digit + num;
    return digit;
};

1

il mio esempio sarebbe :

<div id="showTime"></div>

    function x() {
    var showTime = document.getElementById("showTime");
    var myTime = new Date();
    var hour = myTime.getHours();
    var minu = myTime.getMinutes();
    var secs = myTime.getSeconds();
    if (hour < 10) {
        hour = "0" + hour
    };
    if (minu < 10) {
        minu = "0" + minu
    };
    if (secs < 10) {
        secs = "0" + secs
    };

    showTime.innerHTML = hour + ":" + minu + ":" + secs;
}

setInterval("x()", 1000)

1

`${number}`.replace(/^(\d)$/, '0$1');

Regex è il migliore.


Questo sembra essere quasi identico alla risposta di Joe sopra. Ti consigliamo di aggiungere ulteriori informazioni per migliorare la tua risposta o eliminarla del tutto.
Ethan,

1

Il tipo di dati AS in Javascript è determinato in modo dinamico e considera 04 come 4 Utilizzare l'istruzione condizionale se il valore è inferiore a 10, quindi aggiungere 0 prima di esso rendendolo stringa E.g,

var x=4;
  x = x<10?"0"+x:x
 console.log(x); // 04

1

Ho creato una funzione di formattazione piuttosto semplice che chiamo ogni volta che ho bisogno di una semplice data formattata. Si occupa della formattazione di singole cifre per raddoppiare le cifre quando sono inferiori a 10. Elimina una data formattata comeSat Sep 29 2018 - 00:05:44

Questa funzione viene utilizzata come parte di una variabile utils, quindi viene chiamata come:

let timestamp = utils._dateFormatter('your date string');

var utils = {
  _dateFormatter: function(dateString) {
    let d = new Date(dateString);
    let hours = d.getHours();
    let minutes = d.getMinutes();
    let seconds = d.getSeconds();
    d = d.toDateString();
    if (hours < 10) {
      hours = '0' + hours;
    }
    if (minutes < 10) {
      minutes = '0' + minutes;
    }
    if (seconds < 10) {
      seconds = '0' + seconds;
    }
    let formattedDate = d + ' - ' + hours + ':' + minutes + ':' + seconds;
    return formattedDate;
  }
}

1

Aggiornato per le funzioni freccia ES6 (supportato in quasi tutti i browser moderni, vedi CanIUse )

const formatNumber = n => ("0" + n).slice(-2);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.