Esto funciona para redondear a N dígitos (si solo desea truncar a N dígitos, elimine la llamada Math.round y use la Math.trunc):
function roundN(value, digits) {
var tenToN = 10 ** digits;
return /*Math.trunc*/(Math.round(value * tenToN)) / tenToN;
}
Tuve que recurrir a esa lógica en Java en el pasado cuando estaba creando componentes de E-Slate de manipulación de datos . Eso es porque descubrí que agregando 0.1 muchas veces a 0 terminaría con una parte decimal inesperadamente larga (esto se debe a la aritmética de punto flotante).
Un comentario de usuario en Número de formato para mostrar siempre 2 lugares decimales llama a esta técnica escalado.
Algunos mencionan que hay casos que no se redondean como se esperaba y en http://www.jacklmoore.com/notes/rounding-in-javascript/ esto se sugiere en su lugar:
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), pero tiene errores en IE: stackoverflow.com/questions/661562/… ; tendrás que escribir tu propia versión ...