Эта функция дает мне правильные результаты для целых чисел:
/**
* @param {integer} num - The number to round
* @param {integer} leadingDigits - How many significant digits at the start to keep
* @returns {integer} rounded num
*/
function round(num, leadingDigits) {
let precision = Math.pow(10, num.toString().length - leadingDigits);
return Math.round(num / precision) * precision;
}
console.log(round(6832, 2));
console.log(round(8773278475, 2));
console.log(round(8, 2));
Это возвращает, как и ожидалось:
6800
8800000000
8
Но это не удается для float из-за .toString().length
взлом. Если у кого-то есть лучшее решение, пожалуйста, опубликуйте его.
Хорошее решение короткое и легкое для понимания.