Это работает для округления до N цифр (если вы просто хотите усечь до N цифр, удалите вызов Math.round и используйте Math.trunc):
function roundN(value, digits) {
var tenToN = 10 ** digits;
return /*Math.trunc*/(Math.round(value * tenToN)) / tenToN;
}
Раньше приходилось прибегать к такой логике на Java, когда я создавал компоненты E-Slate для обработки данных . Это потому, что я обнаружил, что добавляя 0,1 много раз к 0, вы получите неожиданно длинную десятичную часть (это связано с арифметикой с плавающей запятой).
Комментарий пользователя к номеру формата, чтобы всегда отображать 2 десятичных знака, вызывает этот метод масштабирования.
Некоторые упоминают, что есть случаи, которые не округляются, как ожидалось, и на http://www.jacklmoore.com/notes/rounding-in-javascript/ предлагается вместо этого:
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), но в IE есть ошибки: stackoverflow.com/questions/661562/… ; вам придется написать свою собственную версию ...