4099 votes

Tour d'au plus 2 décimales en JavaScript

J'aimerais arrondi à 2 décimales, mais seulement si nécessaire.

Entrée:

10
1.7777777
9.1

Sortie:

10
1.78
9.1

Comment puis-je faire cela en JavaScript?

5298voto

ustasb Points 7142

Utiliser Math.round(num * 100) / 100

4187voto

AGK Points 4929

Si la valeur est le type de texte:

parseFloat("123.456").toFixed(2);

Si la valeur est le nombre:

var numb = 123.23454;
numb = numb.toFixed(2);

Il y a un inconvénient que des valeurs comme la 1.5 sera une "1.50" comme la sortie. Un correctif proposé par @minitech:

var numb = 1.5;
numb = +numb.toFixed(2);
// Note the plus sign that drops any "extra" zeroes at the end.
// It changes the result (which is a string) into a number again (think "0 + foo"),
// which means that it uses only as many digits as necessary.

637voto

MarkG Points 686

Vous pouvez utiliser

function roundToTwo(num) {    
    return +(Math.round(num + "e+2")  + "e-2");
}

J'ai trouvé ce fil sur MDN. Leur chemin évite le problème avec 1.005 qui a été mentionné.

roundToTwo(1.005)
1.01
roundToTwo(10)
10
roundToTwo(1.7777777)
1.78
roundToTwo(9.1)
9.1

208voto

Lavamantis Points 692

MarkG réponse est la bonne. Voici une extension générique pour n'importe quel nombre de chiffres après la virgule.

Number.prototype.round = function(places) {
  return +(Math.round(this + "e+" + places)  + "e-" + places);
}

Utilisation:

var n = 1.7777;    
n.round(2); // 1.78

Unité de test:

it.only('should round floats to 2 places', function() {

  var cases = [
    { n: 10,      e: 10,    p:2 },
    { n: 1.7777,  e: 1.78,  p:2 },
    { n: 1.005,   e: 1.01,  p:2 },
    { n: 1.005,   e: 1,     p:0 },
    { n: 1.77777, e: 1.8,   p:1 }
  ]

  cases.forEach(function(testCase) {
    var r = testCase.n.round(testCase.p);
    assert.equal(r, testCase.e, 'didn\'t get right number');
  });
})

66voto

machineaddict Points 1638

Aucune réponse trouvée ici est correcte. @stinkycheeseman demandé de round up, vous tous arrondi le nombre.

Pour finir, utilisez ceci:

Math.ceil(num * 100)/100;

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