Búsqueda de sitios web

matemáticas - ¿Cómo puedo eliminar la parte decimal de un número en JavaScript?


Tengo los resultados de una división y deseo descartar la parte decimal del número resultante.

¿Cómo puedo hacer esto?

Respuesta #1

Podrías usar...

  • Math.trunc() (trunca la parte fraccionaria, también vea más abajo)
  • Math.floor() (redondear hacia abajo)
  • Math.ceil() (redondear hacia arriba)
  • Math.round() (redondear al entero más cercano)

...dependiendo de cómo querías eliminar el decimal.

Math.trunc() aún no es compatible con todas las plataformas (principalmente IE), pero podrías usar fácilmente un polyfill mientras tanto.

Otro método para truncar la porción fraccionaria con excelente compatibilidad en plataformas es mediante el uso de un operador a nivel de bits (por ejemplo, |0). El efecto secundario de usar un operador a nivel de bits en un número es que tratará su operando como un entero con signo de 32 bits, eliminando así el componente fraccionario. Ten en cuenta que esto también distorsionará los números mayores de 32 bits.

También puede estar hablando sobre la inexactitud del redondeo decimal con la aritmética de punto flotante.

Lectura obligatoria - Lo que todo científico informático debería saber sobre la aritmética de punto flotante.

Respuesta #2

También puedes usar operadores a nivel de bits para truncar el decimal.

p. ej.

let x = 9 / 2;
console.log(x); // 4.5

x = ~~x;
console.log(x); // 4

x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3

Las operaciones a nivel de bits son considerablemente más eficientes que las funciones de matemáticas. El operador bit a bit doble NO también parece superar ligeramente a las operaciones a nivel de bits x | 0 y x << 0 por una cantidad negligible.

// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) | 0;
}

// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) << 0;
}

// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
    Math.trunc(i * 0.5);
}

// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
    ~~(i * 0.5);
}

También vale la pena señalar que el operador bit a bit 'not' tiene prioridad sobre las operaciones aritméticas, por lo que puede ser necesario rodear los cálculos con paréntesis para obtener el resultado deseado:

const x = -3.7

console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

Más información sobre el operador de doble negación bit a bit se puede encontrar en Doble negación bit a bit (~~)

También debe asegurarse de que su número entero no necesite más de 32 bits para representarse:

const a = 0x100000000 + 0.1; // 4294967296.1
console.log(Math.trunc(a)); // 4294967296
console.log(~~a); // 0

Respuesta #3

También puedes mostrar un cierto número de dígitos después del punto decimal (aquí 2 dígitos) usando toFixed, que devolverá una representación en forma de cadena:

var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string

Respuesta #4

También podrías hacer

parseInt(a/b)

Respuesta #5

Usa la función Math.round().

Math.round(65.98) // will return 66 
Math.round(65.28) // will return 65

Respuesta #6

Usa Math.round().

(La respuesta de Alex es mejor; hice una suposición :)

Respuesta #7

Aquí está el compresivo en una explicación detallada con la ayuda de publicaciones anteriores:

1. Math.trunc() : Se utiliza para eliminar los dígitos que siguen al punto. Convierte implícitamente. Pero, no es compatible con IE.

Ejemplo:

Math.trunc(10.5) // 10
Math.trunc(-10.5) // -10    

Otra forma alternativa: Uso del operador bit a bit not:

Ejemplo:

x= 5.5
~~x // 5

2. Math.floor() : Se utiliza para dar el valor entero mínimo posible. Es compatible con todos los navegadores.

Ejemplo:

Math.floor(10.5) // 10
Math.floor(-10.5) // -11

3. Math.ceil() : Se utiliza para dar el valor entero más alto posible. Es compatible con todos los navegadores.

Ejemplo:

Math.ceil(10.5) // 11
Math.ceil(-10.5) // -10

4. Math.round() : Se redondea al número entero más cercano. Es compatible con todos los navegadores.

Ejemplo:

Math.round(10.5) // 11
Math.round(-10.5)// -10
Math.round(10.49) // 10
Math.round(-10.51) // -11

Artículos relacionados