round - ¿Cómo redondeo un número en JavaScript?
redondear decimales javascript (8)
Aquí hay una manera de poder utilizar Math.round()
con un segundo argumento (número de decimales para redondeo):
// ''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
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 mostrar son enteros puros. Aunque no sé mucho de JavaScript. ¿Cómo voy a escribir un método que toma estas veces flota y las convierte en enteros?
Math.floor (19.5) = 19 también debería funcionar.
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 convertir una variable en un tipo determinado, en este caso entero y coma flotante.
Según la especificación ECMAScript , los números en JavaScript están representados solo por el formato IEEE 754 de 64 bits de doble precisión. Por lo tanto, no existe realmente un tipo entero en JavaScript.
En cuanto al redondeo de estos números, hay varias maneras de lograrlo. El objeto Math nos da tres métodos de redondeo que podemos usar:
Math.round() es el más utilizado, devuelve el valor redondeado al entero más cercano. Luego está el Math.floor() que devuelve el entero más grande menor o igual que un número. Por último, tenemos la función Math.ceil() que devuelve el entero más pequeño mayor o igual que un número.
También está toFixed() que devuelve una cadena que representa el número utilizando notación de punto fijo.
Ps .: No hay segundo argumento en el método Math.round () . El toFixed () no es específico de IE , está within la especificación de ECMAScript también
Si necesita redondear a una cierta cantidad 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;
}
También puede usar para toFixed(x)
o toPrecision(x)
donde x es la cantidad de dígitos.
Ambos métodos son compatibles con todos los principales navegadores
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 es muy larga, será incorrecta.
Usted debe convertir su 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 un trazador de líneas:
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