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?

Était-ce utile?

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) 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top