Tengo los resultados de una división y deseo descartar la porción decimal del número resultante.
¿Cómo puedo hacer esto?
fuente
Tengo los resultados de una división y deseo descartar la porción decimal del número resultante.
¿Cómo puedo hacer esto?
Podrías usar ...
Math.trunc()
(parte fraccionaria truncada, ver también a continuación)Math.floor()
(redondear a la baja)Math.ceil()
(redondeo) Math.round()
(redondear al entero más cercano)... dependiendo de cómo quisieras eliminar el decimal.
Math.trunc()
aún no es compatible con todas las plataformas (es decir, IE), pero mientras tanto podría usar fácilmente un polyfill .
Otro método para truncar la porción fraccional con excelente soporte de plataforma es mediante el uso de un operador bit a bit (.eg |0
). El efecto secundario de usar un operador bit a bit en un número es que tratará su operando como un entero de 32 bits con signo, eliminando así el componente fraccional. Tenga en cuenta que esto también alterará los números mayores de 32 bits.
También puede estar hablando de la inexactitud del redondeo decimal con aritmética de coma flotante.
Lectura requerida: lo que todo informático debe saber sobre la aritmética de punto flotante .
Math.floor()
va a aumentar el valor numérico cuando el número es negativo . AsíMath.floor(-1.2) -> -2
mientrasMath.floor(1.2) -> 1
.parseInt(-1.2) -> -1
( como lo menciona @FloydPink ) descartará la parte decimal como se esperaba para los números positivos y negativos .> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100
en javascript es229.99999999999997
, por lo que parece que el operador bit a bit está haciendo su trabajo correctamente en su ejemplo.|0
que usa enteros de 64 bits?También puede usar operadores bit a bit para truncar el decimal.
p.ej
Las operaciones bit a bit son considerablemente más eficientes que las funciones matemáticas. El operador de doble bit a bit no parece también superan ligeramente las
x | 0
yx << 0
bit a bit operaciones por una cantidad insignificante.También vale la pena señalar que el operador bit a bit no tiene prioridad sobre las operaciones aritméticas, por lo que es posible que necesite rodear los cálculos con paréntesis para obtener el resultado deseado:
Se puede encontrar más información sobre el operador doble bit a bit en NO doble bit a bit (~~)
fuente
También podrías hacer
fuente
parseInt
no funcionará de manera confiable para números grandes, porque funciona convirtiendo primero su argumento en una cadena, y para números grandes el resultado utilizará la notación exponencial. Por ejemplo:var n = 22222222222222222222222; parseInt(n);
volverá2
, porquen.toString()
devuelve2.2222222222222223e+22
.parseInt()
para su propósito, que es tomar un número en una cadena y devolver aNumber
.También puede mostrar un cierto número de dígitos después del punto decimal (aquí 2 dígitos) usando el siguiente código:
fuente
Utiliza la
Math.round()
función.fuente
$.round = Math.round
;)Uso
Math.round()
.(La respuesta de Alex es mejor; hice una suposición :)
fuente
Con ES2015, Math.trunc () está disponible.
No es compatible con IE11 o inferior, pero funciona en Edge y en cualquier otro navegador moderno.
fuente
Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)
funcionaría?value = 2.3
yx = 2
volveremos2.29
. No tengo una mejor sugerencia.Si no le importa el enrutamiento, simplemente convierta el número en una cadena, luego elimine todo después del período, incluido el período. Esto funciona si hay un decimal o no.
fuente
toFixed se comportará como redondo.
Para un piso como comportamiento use%:
fuente
Aquí está la compresión en una explicación detallada con la ayuda de las publicaciones anteriores:
1. Math.trunc (): se utiliza para eliminar los dígitos seguidos de punto. Se convierte implícitamente. Pero, no es compatible con IE.
Ejemplo:
Math.trunc (10.5) // 10
Math.trunc (-10.5) // -10
Otra forma alternativa: Uso de bit a bit no operador:
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 usa 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 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
fuente
Para una implementación de ES6, use algo como lo siguiente:
fuente
Esto es para aquellos que desean evitar que los usuarios ingresen números decimales
fuente
Puede usar .toFixed (0) para eliminar la parte decimal completa o proporcionar el número en argumentos hasta el que desea truncar el decimal.
Nota: toFixed convertirá el número a cadena.
fuente
Por ejemplo:
o
fuente