Saltar al contenido

¿Truncar / redondear un número entero en JavaScript?

Solución:

Si usted tiene una cuerda, analícelo como un número entero:

var num = '20.536';
var result = parseInt(num, 10);  // 20

Si usted tiene un número, ECMAScript 6 ofrece Math.trunc para un truncamiento completamente consistente, ya disponible en Firefox 24+ y Edge:

var num = -2147483649.536;
var result = Math.trunc(num);  // -2147483649

Si no puede confiar en eso y siempre tendrá un número positivo, por supuesto, puede usar Math.floor:

var num = 20.536;
var result = Math.floor(num);  // 20

Y finalmente, si tiene un número en [−2147483648, 2147483647], puede truncar a 32 bits utilizando cualquier operador bit a bit. | 0 es común, y >>> 0 se puede utilizar para obtener un entero de 32 bits sin signo:

var num = -20.536;
var result = num | 0;  // -20

La respuesta de Travis Pessetto junto con la de Mozey. trunc2 function fueron las únicas respuestas correctas, considerando cómo JavaScript representa números de punto flotante muy pequeños o muy grandes en notación científica.

Por ejemplo, parseInt(-2.2043642353916286e-15) no analizará correctamente esa entrada. En lugar de regresar 0 volverá -2.

Esta es la forma correcta (y en mi humilde opinión, la menos loca) de hacerlo:

function truncate(number)
{
    return number > 0
         ? Math.floor(number)
         : Math.ceil(number);
}

Agregaré mi solución aquí. Podemos usar el piso cuando los valores están por encima de 0 y el techo cuando son menores que cero:

function truncateToInt(x)
{
    if(x > 0)
    {
         return Math.floor(x);
    }
    else
    {
         return Math.ceil(x);
    }
 }

Luego:

y = truncateToInt(2.9999); // results in 2
y = truncateToInt(-3.118); //results in -3

Aviso: Esta respuesta fue escrita cuando Math.trunc(x) era bastante nuevo y no era compatible con muchos navegadores. Hoy en día, los navegadores modernos admiten Math.trunc(x).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *