Comment puis-je arrondir un nombre en JavaScript?
-
05-07-2019 - |
Question
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, c’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 les rend entiers? La solution
Vous devez convertir votre entrée en un nombre, puis les arrondir:
function toInteger(number){
return Math.round( // round to nearest integer
Number(number) // type cast your input
);
};
Ou en une couche:
function toInt(n){ return Math.round(Number(n)); };
Test avec des valeurs différentes:
toInteger(2.5); // 3
toInteger(1000); // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000
Autres conseils
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;
}
Selon la spécification ECMAScript , les nombres en JavaScript sont représentés. uniquement par le format IEEE 754 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 façons. L'objet Math nous donne trois méthodes d'arrondi que nous pouvons utiliser:
Le Math.round () est le plus couramment utilisé. , il retourne la valeur arrondie au nombre entier le plus proche. Ensuite, il y a le Math.floor () qui renvoie le plus grand entier inférieur ou égal à un nombre. Enfin, nous avons la fonction Math.ceil () qui renvoie le message. plus petit entier supérieur ou égal à un nombre.
Il existe également le toFixed () qui renvoie un chaîne représentant le nombre en utilisant la notation en point fixe.
Ps.: Il n'y a pas de 2e argument dans la méthode Math.round () . toFixed () n'est pas spécifique à IE , son dans la spécification ECMAScript ainsi que
Voici un moyen d'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
Vous pouvez également utiliser toFixed (x)
ou toPrecision (x)
où x est le nombre de chiffres.
Ces deux méthodes sont supportées par tous les principaux navigateurs
Vous pouvez utiliser Math.round () pour arrondir les nombres au nombre entier le plus proche.
Math.round(532.24) => 532
Vous pouvez également utiliser parseInt () et parseFloat () pour convertir une variable en un certain type, ici un entier et un nombre à virgule flottante.
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 pas correct lorsque la longueur de la partie décimale du nombre est trop longue.
Math.floor (19.5) = 19 devrait également fonctionner.