The rarely used built-in JS function
.toExponential()
converts a number into string exponential notation (example: "5.6e+2"). The function handles rounding to the precision specified, so all you have to do is convert the string back to a number.
const round = (num, leadingDigits) =>
// Rounds a number to the specified digits of precision.
// Example: round(555.55, 2) -> "5.6e+2" -> 560
Number(num.toExponential(leadingDigits - 1));
Sample usage:
console.log(round(333.333, 1)); //output: 300
console.log(round(333.333, 2)); //output: 330
console.log(round(333.333, 3)); //output: 333
console.log(round(555.555, 1)); //output: 600
console.log(round(555.555, 2)); //output: 560
console.log(round(555.555, 3)); //output: 556
console.log(round(999.999, 1)); //output: 1000
console.log(round(999.999, 2)); //output: 1000
console.log(round(999.999, 3)); //output: 1000
console.log(round(-0.00222222, 1)); //output: -0.002
console.log(round(-0.00222222, 2)); //output: -0.0022
console.log(round(-0.00222222, 3)); //output: -0.00222
console.log(round(6832, 2)); //output: 6800
console.log(round(8773278475, 2)); //output: 8800000000
console.log(round(8, 2)); //output: 8
Fake precision is a huge nuisance, and a lot of web applications could be improved by cleaning up useless and even misleading digits.