Cómo redondear un número entero hacia arriba o hacia abajo a la decena más cercana usando Javascript

82

Usando Javascript, me gustaría redondear un número pasado por un usuario al 10 más cercano. Por ejemplo, si se pasa 7 debería devolver 10, si se pasa 33 debería devolver 30.

Abdominales
fuente

Respuestas:

161

Divida el número por 10, redondee el resultado y multiplíquelo por 10 nuevamente:

var number = 33;
console.log(Math.round(number / 10) * 10);

Gumbo
fuente
12
Esta técnica también funciona usando Math.floor, si desea evitar el redondeo hacia arriba
Alex W
11
Puede utilizar el método Math.ceil para redondear.
Kerem Demirer
24
Math.round(x / 10) * 10
usuario187291
fuente
19

¿Dónde iestá un int.

Para redondear al múltiplo de 10 más cercano, es decir

11 se convierte en 10
19 se convierte en 10
21 se convierte en 20

parseInt(i / 10, 10) * 10;

Para redondear al múltiplo de 10 más cercano, es decir

11 se convierte en 20
19 se convierte en 20
21 se convierte en 30

parseInt(i / 10, 10) + 1 * 10;  
CMP
fuente
4
¿No debería ser: (parseInt (i / 10, 10) + 1) * 10; ?
user3924331
@ user3924331, tienes razón. La respuesta correcta es (parseInt (i / 10, 10) + 1) * 10; Las ediciones deben tener al menos 6 caracteres, por lo que no es posible agregar solo esos dos paréntesis ... ¯_ (ツ) _ / ¯
Fernando
Hasta el próximo 10 añade 10 para el valor 100, por lo que se convierte en 110. Abajo para más cercana 10 no resta -10 a 100, por lo que 100 estancias 100.
TitanFighter
6

Necesitaba algo similar, así que escribí una función. Usé la función para el redondeo decimal aquí , y como también la uso para el redondeo de enteros, la estableceré como la respuesta aquí también. En este caso, simplemente pase el número que desea redondear y luego 10, el número al que desea redondear.

function roundToNearest(numToRound, numToRoundTo) {
    return Math.round(numToRound / numToRoundTo) * numToRoundTo;
}
Cjbarth
fuente
Me gusta que lo haya convertido en una función, pero ¿esto da una salida diferente a la respuesta aceptada? Y si no, ¿por qué ha usado una fórmula diferente?
RozzA
Devuelve el mismo valor, pero la fórmula es diferente porque facilita su uso. Por ejemplo, si desea redondear al más cercano .25, simplemente puede usarlo .25como segundo argumento. Si tuviera que usar las fórmulas en las otras respuestas, tendría que usarlas 4como segundo argumento cuando quiera redondear .25, lo cual es contrario a la intuición.
Cjbarth
puedes probar eso Acabo de hacer algunas pruebas en la consola y la respuesta aceptada devuelve la respuesta correcta usando .25como segundo argumento - Lo convertí en una función de una líneafunction roundTo(x,y){return Math.round(x / y) * y}
RozzA
@RozzA, tienes razón. Estaba pensando en las respuestas en otra pregunta similar. Simplificaré mi función.
cjbarth