447 votes

Comment formater les nombres en ajoutant 0 aux nombres à un chiffre ?

Je veux formater un nombre pour qu'il ait deux chiffres. Le problème se pose lorsque 0 - 9 est passé, donc j'ai besoin qu'il soit formaté en 00 - 09 .

Existe-t-il un formateur de nombres en JavaScript ?

2 votes

0 votes

Pas en double. ici, on demande de faire précéder (0001, 0002) pas après le point décimal 0.001 0.002

0 votes

Utilisation possible str.padStart(2, '0')); Voir cette réponse : stackoverflow.com/a/66344598/648298

802voto

Joseph Marikle Points 25280

Edit (2021) :

Il n'est plus nécessaire de formater les chiffres à la main comme cela. Cette réponse a été écrite il y a longtemps, dans la lointaine année 2011, lorsque IE était important et que babel et les bundlers n'étaient qu'un rêve merveilleux et plein d'espoir.

Je pense que ce serait une erreur de supprimer cette réponse ; toutefois, au cas où vous vous trouveriez ici, je voudrais attirer votre attention sur le site de la Commission européenne. deuxième réponse la plus votée à cette question à partir de cette édition.

Il vous permettra de vous familiariser avec l'utilisation de .toLocaleString() avec le paramètre options de {minimumIntegerDigits: 2} . C'est passionnant. Ci-dessous, j'ai recréé les trois exemples de ma réponse originale en utilisant cette méthode pour votre confort.

[7, 7.5, -7.2345].forEach(myNumber => {
  let formattedNumber = myNumber.toLocaleString('en-US', {
    minimumIntegerDigits: 2,
    useGrouping: false
  })
  console.log(
    'Input:    ' + myNumber + '\n' +
    'Output:   ' + formattedNumber
  )
})

Réponse originale :

La meilleure méthode que j'ai trouvée est quelque chose comme la suivante :

(Notez que cette version simple ne fonctionne que pour les entiers positifs)

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

Pour les décimales, vous pouvez utiliser ce code (qui est cependant un peu négligé).

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

Enfin, si vous devez faire face à la possibilité de nombres négatifs, il est préférable de stocker le signe, d'appliquer le formatage à la valeur absolue du nombre et de réappliquer le signe après coup. Notez que cette méthode ne limite pas le nombre à deux chiffres au total. Au lieu de cela, elle limite uniquement le nombre à la gauche de la décimale (la partie entière). (La ligne qui détermine le signe a été trouvée aquí ).

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 votes

@KeithPower cette démo n'illustre pas cela.

1 votes

@KeithPower Voici une démo qui illustre la méthode ci-dessus : jsfiddle.net/bkTX3 . Cliquez sur la boîte, modifiez la valeur, puis cliquez sur la boîte pour la voir en action.

1 votes

@Joseph .75 est transformé en 75.

156voto

Rob W Points 125904

Si le nombre est supérieur à 9, convertissez le nombre en une chaîne de caractères (cohérence). Sinon, ajoutez un zéro.

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

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

5 votes

Mais qu'en est-il du temps négatif ? 0-1:20:00

57voto

timrwood Points 5446

Voici une fonction simple de remplissage de chiffres que j'utilise habituellement. Elle permet d'ajouter n'importe quelle quantité de remplissage.

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

Exemples :

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

0 votes

A aussi des problèmes avec le temps négatif. Existe-t-il une solution à ce problème ?

13voto

Stark Points 31
("0" + (date.getMonth() +1)).slice(-2);
("0" + (date.getDay())).slice(-2);

1 votes

Je pense que vous vouliez dire ce qui suit pour obtenir le jour du mois : ("0" + (date.getDate())).slice(-2);

6voto

nickolusroy Points 11

C'est simple et ça marche plutôt bien :

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

1 votes

Peut être écrit comme suit : return number >= 10 ? number : "0" + number.toString() ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X