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

Je veux formater un nombre pour avoir deux chiffres. Le problème survient lorsqu'09 est passé, donc j'ai besoin d'être formaté pour 0009.

Y a-t-il un formateur de nombres en JavaScript?

194
demandé sur Xufox 2011-11-08 01:43:48

27 réponses

La meilleure méthode que j'ai trouvée est quelque chose comme ce qui suit (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 (c'est un peu bâclé cependant).

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 avez à faire face à la possibilité de nombres négatifs, il est préférable de stocker le signe, appliquer la mise en forme à la valeur absolue du nombre, et réappliquer le signe après le fait. Notez que cette méthode ne limite pas le nombre à 2 chiffres au total. Au lieu de cela, il limite seulement le nombre à gauche de la décimale (la partie entière). (La ligne qui détermine le signe a été trouvée ici: Nombre.signe() en javascript)

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);
403
répondu Joseph Marikle 2017-05-23 12:02:46

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

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

n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"
104
répondu Rob W 2011-11-07 21:46:08

Utilisez la méthode toLocaleString () dans n'importe quel nombre. Donc, pour le numéro 6, comme on le voit ci-dessous, vous pouvez obtenir les résultats souhaités.

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

Va générer la chaîne '06'.

76
répondu nyteshade 2015-07-16 23:46:07

Voici une simple fonction de remplissage de nombres que j'utilise habituellement. Il permet toute quantité de rembourrage.

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
44
répondu timrwood 2011-11-07 22:03:38

Dans tous les navigateurs modernes vous pouvez utiliser

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);
  }
);
17
répondu Lifehack 2017-08-21 21:49:57
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);
11
répondu Stark 2013-07-02 06:42:06

Vous pouvez faire:

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

Exemple:

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

Résultat:

00
01
02
10
15
9
répondu fanaur 2015-05-07 19:59:47

, Il semble que vous pourriez avoir une chaîne, au lieu d'un nombre. utilisez ceci:

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

Voici un exemple: http://jsfiddle.net/xtgFp/

6
répondu Joe 2011-11-07 21:52:34

C'est simple et fonctionne assez bien:

function twoDigit(number) {
  var twodigit = number >= 10 ? number : "0"+number.toString();
  return twodigit;
}
6
répondu nickolusroy 2014-07-31 18:02:00

Rapide et sale une doublure....

function zpad(n, len) {
  return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}
5
répondu pwuk 2013-07-04 16:48:17

Je sais que c'est un poste Ancien, mais je voulais fournir une option de solution plus flexible et OO.

J'ai extrapolé un peu la réponse acceptée et étendu l'objet Number de javascript pour permettre un remplissage zéro réglable:

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"

Edit: ajoutez du code pour éviter de couper des nombres plus longs que vos chiffres demandés.

NOTE: ceci est obsolète dans tout sauf IE. Utilisez padStart() à la place.

5
répondu Noah Duncan 2018-07-26 17:56:11

Il N'y a pas de formateur de nombres intégré pour JavaScript, mais certaines bibliothèques accomplissent ceci:

  1. soulignement.string fournit une fonction sprintf (avec de nombreux autres formateurs)
  2. javascript-sprintf , qui souligne.chaîne de l'emprunte.
4
répondu coltraneofmars 2011-11-07 21:55:10

Version Améliorée de la réponse précédente

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));
4
répondu hack4mer 2018-05-14 12:30:18

Ou

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

Avec

function rep(len, chr) { 
   return new Array(len+1).join(chr);
}
3
répondu pwuk 2014-12-01 14:22:09

Si vous souhaitez limiter vos chiffres en même temps:

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

Ce serait aussi couper de toute valeur qui dépasse deux chiffres. J'ai étendu cela à la solution de fanaur.

3
répondu leopold 2017-05-09 08:00:27

La réponse de@Lifehack m'a été très utile; où je pense que nous pouvons le faire en une ligne pour les nombres positifs

 String(input).padStart(2, '0');
3
répondu Jee Mok 2018-07-10 08:35:13
<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
répondu Victor Jatobá 2014-08-28 12:39:21

Voici une solution récursive simple qui fonctionne pour n'importe quel nombre de chiffres.

function numToNDigitStr(num, n)
{
    if(num >=  Math.pow(10, n - 1)) { return num; }
    return "0" + numToNDigitStr(num, n-1);
}
2
répondu user1052527 2016-01-31 04:54:07

Voici ma version. Peut facilement être adapté à d'autres scénarios.

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
répondu Veverke 2015-12-13 14:18:28

Si vous n'avez pas lodash dans votre projet, il sera exagéré d'ajouter toute la bibliothèque juste pour utiliser une fonction. C'est la solution la plus sophistiquée de votre problème que j'ai jamais vu.

_.padStart(num, 2, '0')
1
répondu kucherenkovova 2016-02-24 22:54:52
    function colorOf(r,g,b){
  var f = function (x) {
    return (x<16 ? '0' : '') + x.toString(16) 
  };

  return "#" +  f(r) + f(g) + f(b);
}
1
répondu Alexey Tseitlin 2016-05-22 16:33:37

Pour tous ceux qui veulent avoir des différences de temps et avoir des résultats qui peuvent prendre des nombres négatifs, voici un bon. pad(3) = "03", le pad(-2) = "-02", le 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
répondu mjwrazor 2016-08-04 20:02:47

Avec cette fonction, vous pouvez imprimer avec n chiffres que vous voulez

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
répondu jalmatari 2017-08-21 14:43:51

Mon exemple serait:

<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
répondu DHJ 2017-10-04 09:08:22

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

Regex est le meilleur.

1
répondu Son Tr. 2018-06-08 09:42:54

comme le type de données en Javascript sont déterminés dynamiquement il traite 04 comme 4 Utilisez l'instruction conditionnelle si la valeur est inférieure alors 10 puis ajoutez 0 avant en le faisant chaîne par exemple,

var x=4;
  x = x<10?"0"+x:x
 console.log(x); // 04
1
répondu Siddhartha 2018-06-12 17:53:21

J'ai construit une fonction de format assez simple que j'appelle chaque fois que j'ai besoin d'une date simple formatée. Il traite du formatage de chiffres simples à deux chiffres quand ils sont moins de 10. Il déclenche une date formatée comme Sat Sep 29 2018 - 00:05:44

Cette fonction est utilisée dans le cadre d'une variable utils, elle est donc appelée:

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;
  }
}
0
répondu Arq 2018-09-30 20:39:15