169 votes

Comment arrondir un nombre en Javascript ?

Je veux utiliser Javascript pour arrondir un nombre. Comme le nombre est une devise, je veux qu'il soit arrondi comme dans ces exemples (2 décimales) :

  • 192.168 => 192.20
  • 192.11 => 192.20
  • 192.21 => 192.30
  • 192.26 => 192.30
  • 192.20 => 192.20

Comment réaliser cela en utilisant Javascript ? La fonction Javascript intégrée arrondira le nombre sur la base de la logique standard (moins et plus de 5 pour arrondir).

323voto

Andrew Marshall Points 43955
/**
 * @param num The number to round
 * @param precision The number of decimal places to preserve
 */
function roundUp(num, precision) {
  precision = Math.pow(10, precision)
  return Math.ceil(num * precision) / precision
}

roundUp(192.168, 1) //=> 192.2

2 votes

@AndrewMarshall quel est le but de multiplier, puis de diviser par 10 ?

7 votes

@codecowboy Si vous ne le faites pas, alors ceil() vous donnera 193 Nous devons donc nous assurer que toute la précision que nous voulons conserver se trouve avant le point décimal. Ensuite, nous effectuons l'opération inverse afin de rétablir la valeur "originale".

1 votes

Si vous obtenez un nombre comme 192.19999999999997 vous pouvez postuler .toFixed(1) au num

26voto

suryakiran Points 1091

Un peu tard mais, on peut créer une fonction javascript réutilisable à cette fin :

// Arguments: number to round, number of decimal places
function roundNumber(rnum, rlength) { 
    var newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
    return newnumber;
}

Appelez la fonction comme

alert(roundNumber(192.168,2));

2 votes

Cela fonctionne très bien, mais l'OP a demandé comment arrondir un nombre, donc Math.ceil devrait être utilisé ici au lieu de Math.round.

23voto

Shad Points 5924

L'arrondi normal fonctionnera avec une petite modification :

Math.round(price * 10)/10

et si vous souhaitez conserver un format monétaire, vous pouvez utiliser la méthode des nombres. .toFixed()

(Math.round(price * 10)/10).toFixed(2)

Bien que cela en fasse une chaîne =)

0 votes

Math.round(192.11 * 100)/100 -> 192.11

1 votes

Le deuxième n'a pas besoin d'être arrondi, c'est plus comme price.toFixed(2)

0 votes

@Krtek ooops, Merci de l'avoir remarqué. J'ai mal lu la question. Réponse mise à jour.

10voto

Hoàng Long Points 4513

Très proche de TheEye mais je change un petit truc pour que ça marche :

var num = 192.16;

console.log(    Math.ceil(num * 10) / 10    );

-1voto

TheEye Points 3573

Vous recherchez la fonction plafond : voir ici http://www.w3schools.com/jsref/jsref_ceil.asp .

Attendez, c'est pour l'arrondi des nombres entiers bien sûr :-).

Dans votre cas, vous pouvez simplement ajouter 0,x5 à votre nombre et faire l'arrondi, x représentant plusieurs 0 en fonction du nombre que vous voulez arrondir.

Exemple :

19.21 + 0.05 = 19.26 -> round 19.3
19.29 + 0.05 = 19.34 -> round 19.3

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