web-dev-qa-db-fra.com

Comment puis-je arrondir un nombre en JavaScript?

Alors que je travaillais sur un projet, je suis tombé sur un script JS créé par un ancien employé qui crée essentiellement un rapport sous la forme:

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 sous la forme 2.20011E+17. Ce que je veux sortir sont des entiers purs. Je ne connais pas beaucoup de JavaScript, cependant. Comment pourrais-je écrire une méthode qui prend ces parfois-floats et en fait des entiers?

65
Ace

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

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

Ou comme une ligne:

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
51
aemkei

Si vous avez besoin d'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;
        }
103
Raj Rao

Selon la spécification ECMAScript , les nombres en JavaScript ne sont représentés que par le format IEEE 754 au format 64 bits à double précision. Il n’ya donc pas vraiment de type entier en JavaScript.

En ce qui concerne l'arrondissement de ces chiffres, vous pouvez y parvenir de plusieurs manières. L'objet Math nous donne trois méthodes d'arrondi que nous pouvons utiliser:

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

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

Ps .: Il y a no 2nd argument dans la méthode Math.round (). Le toFixed () _ est n'est pas IE spécifique, son dans la spécification ECMAScript ainsi

29
Pablo Cabrera

Voici un moyen de pouvoir utiliser Math.round() avec un deuxième argument (nombre de décimales à arrondir):

// '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
25
Frosty Z

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

Ces deux méthodes sont supportées par tous les principaux navigateurs.

20
irfandar

Vous pouvez utiliser Math.round () pour arrondir les nombres au nombre entier le plus proche.

Math.round(532.24) => 532

Vous pouvez aussi utiliser parseInt () et parseFloat () pour convertir une variable en un certain type, ici un entier et un nombre à virgule flottante.

15
Aron Rotteveel

Une très bonne approximation pour arrondir:

function Rounding (number, precision){

var newNumber;
var sNumber = number.toString();

var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;

if (number < 0)
  newNumber = (number -  5 * Math.pow(10,-increase));
else
  newNumber = (number +  5 * Math.pow(10,-increase));

var multiple = Math.pow(10,precision);

return Math.round(newNumber * multiple)/multiple;
}

Ce n'est que dans certains cas, lorsque la longueur de la partie décimale du nombre est très longue, qu'elle sera incorrecte.

0
user2768720