Rounding numbers in JavaScript
Very often we need to round some numbers, and Javascript has function to round numbers, but sometimes it’s not working very good. Luckily we can round number through math functions. First, let’s see how to use built-in Javascript functions. This script was also published on Adobe’s InDesign scripting forum. I collected some more info’s and combined them all into this post.
First we declare our test number:
var myNum = Number(12.248481545454);
1. Rounding to Integer
Built in Javascript function for rounding numbers to integers:
var myRounded = Math.round(myNum); // returns 12
round() – Returns the value of a number rounded to the nearest integer
var myRounded = Math.ceil(myNum); // returns 13
ceil() – Returns the smallest integer greater than or equal to the number
var myRounded = Math.floor(myNum); // returns 12
floor() – Returns the largest integer less than or equal to a number
Another way to get ‘floor’ of a number is to add two tildas before number variable like this (thanks Marc!):
var myRounded = (~~myNum); // returns 12
2. Rounding with decimals
Built in Javascript function for rounding decimal numbers:
var myRounded = myNum.toFixed(2); // returns 12.25
toFixed() – formats a number to use a specified number of trailing decimals
We can also do it with round, but we need to use math. It looks something like this (two decimal rounding):
var myRounded = Math.round(myNum*100)/100; // returns 12.25
This is safest way for rounding numbers. We can write short function for rounding, but what I do, is to create prototype for Number object with ability to input number of decimals I want. This function looks like this:
Number.prototype.doRound = function(roundNum, roundDec){
var roundMulit = Math.pow(10,roundDec);
return Math.round(roundNum*roundMulit)/roundMulit;
}
We now can pass number we want to round, and number of decimals, and we get nice rounded number. Let’s see how to use this:
With two decimals:
var myRounded = myNum.doRound(myNum,2); // returns 12.25
With three decimals:
var myRounded = myNum.doRound(myNum,3); // returns 12.248
That’s it, nice, clean and short! Have fun!
[UPDATE]
There is one little mistake in prototype code. Instead of passing number we want to round again, we can use ‘this’ object to pass value. Here is corrected code:
Number.prototype.doRound = function(roundDec){
var roundMulit = Math.pow(10,roundDec);
return Math.round(this*roundMulit)/roundMulit;
}
And here is usage example:
var myRounded = myNum.doRound(2); // returns 12.25
With three decimals:
var myRounded = myNum.doRound(3); // returns 12.248
IndiSnip on Twitter!
IndiSnip on Facebook!
Contact IndiSnip by e-mail!
