javascriptmathroundingdecimal-point

Javascript: formatting a rounded number to N decimals


in JavaScript, the typical way to round a number to N decimal places is something like:

function roundNumber(num, dec) {
  return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}

function roundNumber(num, dec) {
  return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}

console.log(roundNumber(0.1 + 0.2, 2));
console.log(roundNumber(2.1234, 2));

However this approach will round to a maximum of N decimal places while I want to always round to N decimal places. For example "2.0" would be rounded to "2".

Any ideas?


Solution

  • That's not a rounding ploblem, that is a display problem. A number doesn't contain information about significant digits; the value 2 is the same as 2.0000000000000. It's when you turn the rounded value into a string that you have make it display a certain number of digits.

    You could just add zeroes after the number, something like:

    var s = number.toString();
    if (s.indexOf('.') == -1) s += '.';
    while (s.length < s.indexOf('.') + 4) s += '0';
    

    (Note that this assumes that the regional settings of the client uses period as decimal separator, the code needs some more work to function for other settings.)