Round Numbers Accurately to Specified Place Value with Javascript
This function rounds numbers to a specified accuracy. There are several ways to round in Javascript. Some rounding methods are faster than others, and some are more accurate, in terms of rounding errors, than others.
All four of these Javascript rounding functions are accurate to 15 decimal places, after which there is a small variation in the rounding accuracy.
To use any of the functions below call like this,
Javascript: round(3.14159265358979323846, 4);
Result: 3.1416
Method #1
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
// ~67 avg milliseconds to iterating 10,000 times.
Javascript: round(3.14159265358979323846, 20);
Result: 3.14159265358979311600 // rounding error by 0.00000000000000012246
Method #2
function round2(value, decimals) {
var accuracy = Math.pow(10, decimals || 0);
return Math.round(value * accuracy) / accuracy;
}
// ~60 avg milliseconds to iterating 10,000 times.
Javascript: round(3.14159265358979323846, 20);
Result: 3.14159265358979356009 // rounding error by 0.00000000000000032163
Method #3 NOTE: this method returns a string
function round3(value, decimals) {
var accuracy = decimals || 0;
return parseFloat(parseFloat(value)).toFixed(accuracy);
}
// ~58 avg milliseconds to iterating 10,000 times.
Javascript: round(3.14159265358979323846, 20);
Result: 3.14159265358979311600 // rounding error by 0.00000000000000012246
Method #4
function round4(value, decimals) {
return Number.parseFloat(value).toPrecision(decimals);
}
// ~61 avg milliseconds to iterating 10,000 times.
Javascript: round(3.14159265358979323846, 20);
Result: 3.14159265358979356009 // rounding error by 0.00000000000000032163