Math.round(num) vs num.toFixed(0) and browser inconsistencies

eft picture eft · Feb 19, 2009 · Viewed 74.3k times · Source

Consider the following code:

for (var i=0;i<3;i++){
   var num = i + 0.50;
   var output = num + " " + Math.round(num) + " " + num.toFixed(0);
   alert(output);
}

In Opera 9.63 I get:

0.5 1 0

1.5 2 2

2.5 3 2

In FF 3.03 I get:

0.5 1 1

1.5 2 2

2.5 3 3

In IE 7 I get:

0.5 1 0

1.5 2 2

2.5 3 3

Note the bolded results. Why are this inconsistencies present? Does this mean that toFixed(0) should be avoided? What's the correct way to round a number to the nearest integer?

Answer

TJ L picture TJ L · Feb 19, 2009

Edit: To answer your edit, use Math.round. You could also prototype the Number object to have it do your bidding if you prefer that syntax.

Number.prototype.round = function() {
  return Math.round(this);
}
var num = 3.5;
alert(num.round())

I've never used Number.toFixed() before (mostly because most JS libraries provide a toInt() method), but judging by your results I would say it would be more consistent to use the Math methods (round, floor, ceil) then toFixed if cross-browser consistency is what you are looking for.