Round a Number to 2 Decimal Places | JavaScript
You can use:
Math.round((9.9876 + Number.EPSILON) * 100) / 100
//returns 9.99
Or
+9.9876.toFixed(2)
//returns 9.99
But, it seems like Math.round() is a better solution, but it is not! In some cases it will NOT round correctly. Also, toFixed() will NOT round correctly in some cases.
Approximate Rounding
To correct the rounding problem with the previous Math.round() and toFixed(), you can define a custom rounding function that performs a "nearly equal" test to determine whether a fractional value is sufficiently close to a midpoint value to be subject to midpoint rounding.The following function return the value of the given number rounded to the nearest integer accurately.
Number.prototype.roundTo = function(decimal) {
return +(Math.round(this + "e+" + decimal) + "e-" + decimal);
}
var num = 9.7654;
console.log( num.roundTo(2));
Output:
9.77
Using the above function with halfway numbers, you will get either the upper rounded value as expected, or the lower rounded value sometimes depending on the input.
Using Number.toLocaleString()
The toLocaleString() method returns a string with a language-sensitive representation of the number. The following custom rounding function using Number.toLocaleString() return the value of the given number rounded to the nearest integer accurately.
const roundTo = (num, decimals) => num.toLocaleString('en-US', {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
console.log(roundTo(5.015)); //returns 5.02
console.log(roundTo(1.555)); //returns 1.56
Rounding
Rounding means making a number simpler but keeping its value close to what it was. There is not a universal solution for everyone. There are several different rounding algorithms , your implementation can be different, depends on your requirements.Rounding Numbers in JavaScript
In most cases JavaScript developers using Math.round() or toFixed() for rounded to the nearest integer. But, it seems like Math.round() is a better solution, but it is not! In some cases it will NOT round correctly. Also, toFixed() will also NOT round correctly in some cases.Math.round()
var num = 5.015
console.log( Math.round((num+ Number.EPSILON)* 100)/100);
Output:
5.01 //wrong (should be 5.02)
In the above case the output is 5.01 instead of 5.02. If you execute the 5.015 with the above function roundTo() the output will be 5.02, that is the correct answer.
toFixed()
var num = 1.555
console.log( parseFloat(num).toFixed(2));
Output:
1.55 //wrong (should be 1.56)
In the above case the output is 1.55 instead of 1.56 . If you execute the 1.555 with the above function roundTo() the output will be 1.56, that is the correct answer.

When the rounded number is increased, then the given number is said to be rounded up, whereas, if the rounded number is decreased, then it is said to be rounded down.
Related Topics
- JavaScript Popup Boxes
- Opening a new window in JavaScript
- How to Create Drop-Down Lists in JavaScript
- How do I include a JavaScript file in another JavaScript file?
- Print the content of a Div using JavaScript/jQuery
- How to get the current URL using JavaScript ?
- How to Detect a Mobile Device with JavaScript/jQuery
- How to validate an email address in JavaScript
- JavaScript Array Iteration
- How to Remove a Specific Item from an Array in JavaScript
- What is JavaScript closures?
- How To Remove a Property from a JavaScript Object
- How to get selected value from Dropdown list in JavaScript
- How do I get the current date in JavaScript?
- How to Open URL in New Tab | JavaScript
- How to delay/wait/Sleep in code execution | JavaScript
- How to convert string to boolean | JavaScript
- How to check undefined in JavaScript?
- How To Copy to Clipboard | JavaScript
- How to encode a URL using JavaScript?
- How to force Input field to enter numbers only | JavaScript
- How to create multiline string in JavaScript
- How to Check for an Empty String in JavaScript?