Pergunta

Enquanto trabalhava em um projeto, me deparei com um JS-script criado por um ex-funcionário que basicamente cria um relatório na forma de

Name : Value
Name2 : Value2

etc.

O povo é que os valores às vezes podem ser flutuantes (com precisão diferente), números inteiros ou mesmo na forma 2.20011E+17. O que eu quero produzir são inteiros puros. Eu não conheço muito JavaScript, no entanto. Como eu escreveria um método que as pega às vezes e os torna inteiros?

Foi útil?

Solução

Você tem para converter sua entrada em um número e depois entrelaçá -los:

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

Ou como um revestimento:

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

Testando com valores diferentes:

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

Outras dicas

Se você precisar arredondar para um certo número de dígitos, use a seguinte função

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

De acordo com Especificação Ecmascript, os números em JavaScript são representados apenas pelo formato de precisão dupla de 64 bits IEEE 754. Portanto, não existe realmente um tipo inteiro no JavaScript.

Em relação ao arredondamento desses números, existem várias maneiras de conseguir isso. o Matemática Objeto nos dá três métodos de arredondamento que podemos usar:

o Math.Round () é mais comumente usado, ele retorna o valor arredondado para o número inteiro mais próximo. Então há o Math.floor () que retorna o maior número inteiro menor ou igual a um número. Por fim, temos o Math.CEIL () função que retorna o menor número inteiro maior ou igual a um número.

Há também o tofixed () Isso retorna uma string representando o número usando a notação de ponto fixo.

PS.: Existe Nenhum segundo argumento no Math.Round () método. o tofixed () é não é específico, Está dentro de A especificação Ecmascript também

Aqui está uma maneira de poder usar Math.round() com um segundo argumento (número de decimais para arredondamento):

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

Você também pode usar toFixed(x) ou toPrecision(x) Onde x é o número de dígitos.

Ambos os métodos são suportados em todos os principais navegadores

Você pode usar Math.Round () Para obter números arredondados para o número inteiro mais próximo.

Math.round(532.24) => 532

Além disso, você pode usar parseint () e parsefloat () Para lançar uma variável para um determinado tipo, neste caso inteiro e ponto flutuante.

Uma aproximação muito boa para arredondamento:

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

Somente em alguns casos em que a duração da parte decimal do número é muito longa, estará incorreto.

Math.floor (19.5) = 19 também deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top