views:

4455

answers:

4

Hey all.

While working on a project, I came across a js-script created by a former employee that basically creates a report in the form of

Name : Value Name2 : Value2 etc...

Problem for me though, is that the values can sometimes be floats (with different precision), integers, or even in the form "2.20011E+17"

What I outputted though are pure integers. I don't know a lot of javascript though.

How would I go about writing a method that takes these sometimes-floats and makes them integers?

+9  A: 

You can use Math.round() for rounding numbers to the nearest integer.

Math.round(532.24) => 532

Also, you can use parseInt() and parseFloat() to cast a variable to a certain type, in this case integer and floating point.

Aron Rotteveel
So Math.round(532.24,0) = 532?
Ace
Math.round() does not have a second argument, as it rounds the number to the nearest integer.
Aron Rotteveel
+7  A: 

According to the ECMAScript specification, numbers in JavaScript are represented only by the double-precision 64-bit format IEEE 754. Hence there is not really an integer type in JavaScript.

Regarding the rounding of these numbers, there are a number of ways you can achieve this. The Math object gives us three rounding methods wich we can use:

The Math.round() is most commonly used, it returns the value rounded to the nearest integer. Then there is the Math.floor() wich returns the largest integer less than or equal to a number. Lastly we have the Math.ceil() function that returns the smallest integer greater than or equal to a number.

There is also the toFixed() that returns a string representing the number using fixed-point notation.

Ps.: There is no 2nd argument in the Math.round() method. The toFixed() is not IE specific, its within the ECMAScript specification aswell

Pablo Cabrera
Good explanation and my bad for supplying the second arguement; I'll edit my answer to reflect this.
Aron Rotteveel
You just have to go for the spec =]
Pablo Cabrera
+1  A: 

You hav to convert your input into a number and then round them:

function toInteger(number){ 
  return Math.round(  // round to nearest integer
    Number(number)    // type cast your input
  ); 
};

Or as a one liner:

function toInt(n){ return Math.round(Number(n)); };

Testing with different values:

toInteger(2.5);           // 3
toInteger(1000);          // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000
aemkei
+9  A: 

If you need to round to a certain number of digits use the following function

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }
Rajah