Domanda

Mentre stavo lavorando a un progetto, mi sono imbattuto in uno script JS creato da un ex dipendente che fondamentalmente crea un rapporto sotto forma di

Name : Value
Name2 : Value2

ecc.

Il problema è che a volte i valori possono essere float (con diversa precisione), numeri interi o persino nella forma 2.20011E + 17 . Quello che voglio produrre sono interi puri. Non conosco molto JavaScript, però. Come potrei scrivere un metodo che prende questi float a volte e li rende interi?

È stato utile?

Soluzione

Devi convertire i tuoi input in un numero e poi arrotondarli:

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

O come linea unica:

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

Test con valori diversi:

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

Altri suggerimenti

Se devi arrotondare ad un certo numero di cifre usa la seguente funzione

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

Secondo la specifica ECMAScript , i numeri in JavaScript sono rappresentati solo dal formato IEEE 754 a doppia precisione a 64 bit. Quindi non esiste un tipo intero in JavaScript.

Per quanto riguarda l'arrotondamento di questi numeri, ci sono molti modi per raggiungere questo obiettivo. L'oggetto Math ci offre tre metodi di arrotondamento che possiamo usare:

Il Math.round () è più comunemente usato , restituisce il valore arrotondato al numero intero più vicino. Poi c'è il Math.floor () che restituisce il più grande numero intero inferiore o uguale a un numero. Infine abbiamo la Math.ceil () che restituisce la funzione intero più piccolo maggiore o uguale a un numero.

Esiste anche il toFixed () che restituisce un stringa che rappresenta il numero usando la notazione a virgola fissa.

Ps .: Non esiste nessun secondo argomento nel metodo Math.round () . Il toFixed () non è non specifico per IE , è all'interno delle specifiche ECMAScript

Ecco un modo per poter usare Math.round () con un secondo argomento (numero di decimali per arrotondamento):

// '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

Puoi anche usare toFixed (x) o toPrecision (x) dove x è il numero di cifre.

Entrambi questi metodi sono supportati in tutti i principali browser

Puoi utilizzare Math.round () per arrotondare i numeri all'intero più vicino.

Math.round(532.24) => 532

Inoltre, puoi utilizzare parseInt () e parseFloat () per trasmettere una variabile a un certo tipo, in questo caso intero e virgola mobile.

Un'ottima approssimazione per l'arrotondamento:

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;
}

Solo in alcuni casi quando la lunghezza della parte decimale del numero è molto lunga sarà errata.

Anche Math.floor (19.5) = 19 dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top