Pregunta

Mientras trabajaba en un proyecto, encontré un script JS creado por un antiguo empleado que básicamente crea un informe en forma de

Name : Value
Name2 : Value2

etc.

El problema es que los valores a veces pueden ser flotantes (con diferente precisión), enteros o incluso en la forma 2.20011E + 17 . Lo que quiero dar salida son puros enteros. Sin embargo, no conozco mucho JavaScript. ¿Cómo haría para escribir un método que tome estos flotantes a veces y los convierta en enteros?

¿Fue útil?

Solución

Tienes que convertir tu entrada en un número y luego redondearlos:

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

O como una línea:

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

Prueba con diferentes valores:

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

Otros consejos

Si necesita redondear a un cierto número de dígitos, use la siguiente función

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

De acuerdo con la especificación ECMAScript , los números en JavaScript están representados solo por el formato de doble precisión de 64 bits IEEE 754. Por lo tanto, no hay realmente un tipo entero en JavaScript.

Con respecto al redondeo de estos números, hay varias formas de lograrlo. El objeto Math nos da tres métodos de redondeo que podemos usar:

El Math.round () es el más comúnmente utilizado , devuelve el valor redondeado al entero más cercano. Luego está el Math.floor () que devuelve el más grande entero menor o igual que un número. Por último, tenemos la función Math.ceil () que devuelve la el entero más pequeño mayor o igual que un número.

También existe el toFixed () que devuelve un cadena que representa el número mediante notación de punto fijo.

Ps .: No hay ningún segundo argumento en el método Math.round () . El toFixed () no es específico de IE , es dentro de la especificación ECMAScript también

Esta es una manera de poder usar Math.round () con un segundo argumento (número de decimales para redondear):

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

También puede usar toFixed (x) o toPrecision (x) donde x es el número de dígitos.

Ambos métodos son compatibles con todos los principales navegadores

Puede usar Math.round () para redondear números al entero más cercano.

Math.round(532.24) => 532

Además, puede usar parseInt () y parseFloat () para emitir una variable a un determinado tipo, en este caso entero y coma flotante.

Una muy buena aproximación para el redondeo:

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 en algunos casos, cuando la longitud de la parte decimal del número sea muy larga, será incorrecta.

Math.floor (19.5) = 19 también debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top