65 votes

Comment arrondir un nombre en JavaScript ?

En travaillant sur un projet, je suis tombé sur un JS-script créé par un ancien employé qui crée essentiellement un rapport sous la forme de

Name : Value
Name2 : Value2

etc.

Le problème est que les valeurs peuvent parfois être des flottants (avec une précision différente), des entiers, ou même de la forme 2.20011E+17 . Ce que je veux produire sont des entiers purs. Mais je ne connais pas grand-chose au JavaScript. Comment pourrais-je écrire une méthode qui prendrait ces chiffres parfois flottants et les transformerait en nombres entiers ?

103voto

Raj Rao Points 3630

Si vous devez arrondir à un certain nombre de chiffres, utilisez la fonction suivante

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }

51voto

aemkei Points 4602

Vous devez convertir votre entrée en un nombre et ensuite l'arrondir :

function toInteger(number){ 
  return Math.round(  // round to nearest integer
    Number(number)    // type cast your input
  ); 
};

Ou en guise de conclusion :

function toInt(n){ return Math.round(Number(n)); };

Test avec différentes valeurs :

toInteger(2.5);           // 3
toInteger(1000);          // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000

30voto

Pablo Cabrera Points 3245

Selon le Spécification ECMAScript En JavaScript, les nombres sont représentés uniquement par le format 64 bits à double précision IEEE 754. Il n'y a donc pas vraiment de type entier en JavaScript.

En ce qui concerne l'arrondi de ces chiffres, il existe plusieurs façons d'y parvenir. Le site Mathématiques nous donne trois méthodes d'arrondi que nous pouvons utiliser :

Le site Math.round() est le plus souvent utilisé, il renvoie la valeur arrondie à l'entier le plus proche. Ensuite, il y a le Math.floor() qui retourne le plus grand nombre entier inférieur ou égal à un nombre. Enfin, nous avons le Math.ceil() qui renvoie le plus petit entier supérieur ou égal à un nombre.

Il y a aussi le toFixed() qui renvoie une chaîne représentant le nombre en notation à virgule fixe.

Ps.. : Il y a pas de 2ème argument dans le Math.round() méthode. Le site toFixed() est non spécifique à l'IE son sur la spécification ECMAScript également

25voto

Frosty Z Points 8935

Voici un moyen de pouvoir utiliser Math.round() avec un deuxième argument (nombre de décimales pour l'arrondi) :

// 'improve' Math.round() to support a second argument
var _round = Math.round;
Math.round = function(number, decimals /* optional, default 0 */)
{
  if (arguments.length == 1)
    return _round(number);

  var multiplier = Math.pow(10, decimals);
  return _round(number * multiplier) / multiplier;
}

// examples
Math.round('123.4567', 2); // => 123.46
Math.round('123.4567');    // => 123

20voto

irfandar Points 113

Vous pouvez également utiliser toFixed(x) ou toPrecision(x)x est le nombre de chiffres.

Ces deux méthodes sont prises en charge par tous les principaux navigateurs.

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