Rounding Numbers to a given Decimal Point

For reasons that are beyond me, Javascript does not have a function that could be used to round a number to a given decimal points. If you want to show the price of an item in the format 5.00, you cannot just call a function round(5,2) to do it. Yes, Javascript has a rounding function - Math.round() - but that function just rounds the number to its nearest integer. So, as always, I have created a function that will do this...

I have done many things that I hate to get this function to work - including converting a number to a string. Don't blame me - its the only way. So do not use the returned value for any calculation - use it for display only. If you must use it for calculation, convert it back to a number using the Number() function.

/**
 * Function that could be used to round a number to a given decimal points. Returns the answer
 * Arguments :  number - The number that must be rounded
 *				decimal_points - The number of decimal points that should appear in the result
 */
function roundNumber(number,decimal_points) {
	if(!decimal_points) return Math.round(number);
	if(number == 0) {
		var decimals = "";
		for(var i=0;i<decimal_points;i++) decimals += "0";
		return "0."+decimals;
	}

	var exponent = Math.pow(10,decimal_points);
	var num = Math.round((number * exponent)).toString();
	return num.slice(0,-1*decimal_points) + "." + num.slice(-1*decimal_points)
}

//Usage
roundNumber(2.55343,2); //Returns 2.55
roundNumber(2.55843,2); //Returns 2.56
roundNumber(2,2); //Returns 2.00
roundNumber(0,2); //Returns 0.00

Is there a better way to do this? Preferably without using string operations?

blog comments powered by Disqus