views:

932

answers:

3

I'm performing the following operation in Javascript:

0.0030 / 0.031

How can I round the result to an arbitrary number of places? What's the maximum number that a var will hold?

+9  A: 

Modern browsers should support a method called toFixed(). Here's an example taken from the web:

// Example: toFixed(2) when the number has no decimal places
// It will add trailing zeros
var num = 10;
var result = num.toFixed(2); // result will equal 10.00

// Example: toFixed(3) when the number has decimal places
// It will round to the thousandths place
num = 930.9805;
result = num.toFixed(3); // result will equal 930.981

toPrecision() might also be useful for you, there is another excellent example on that page.


For older browsers, you can achieve it manually using Math.round. Math.round() will round to the nearest integer. In order to achieve decimal precision, you need to manipulate your numbers a bit:

  1. Multiply the original number by 10^x (10 to the power of x), where x is the number of decimal places you want.
  2. Apply Math.round()
  3. Divide by 10^x

So to round 5.11111111 to three decimal places, you would do this:

var result=Math.round(5.111111*1000)/1000  //returns 5.111
zombat
Don't forget that JScript's `toFixed` implementation is rather deficient - http://www.jibbering.com/faq/#formatNumber
kangax
+1  A: 

The largest positive finite value of the number type is approximately 1.7976931348623157 * 10308. ECMAScript-262 3rd ed. also defines Number.MAX_VALUE which holds that value.

kangax
A: 

To answer Jag's questions:

  1. Use the toFixed() method. Beware; it returns a string, not a number.
  2. Fifteen, maybe sixteen. If you try to get more, the extra digits will be either zeros or garbage. Try formatting something like 1/3 to see what I mean.
Robert L