把数字四舍五入到逗号后的两位数

我不知道该怎么做?我在加逗号,result 当然总是一个逗号后面有太多位数的数字。有人吗?

308653 次浏览

EDIT 2:

Use the Number object's toFixed method like this:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roundedString); // toFixed() returns a string (often suitable for printing already)

It rounds 42.0054321 to 42.01

It rounds 0.005 to 0.01

It rounds -0.005 to -0.01 (So the absolute value increases on rounding at .5 border)

jsFiddle example

This worked for me:

var new_number = float.toFixed(2);

Example:

var my_float = 0.6666


my_float.toFixed(3) # => 0.667

UPDATE: Keep in mind, at the time the answer was initially written in 2010, the bellow function toFixed() worked slightly different. toFixed() seems to do some rounding now, but not in the strictly mathematical manner. So be careful with it. Do your tests... The method described bellow will do rounding well, as mathematician would expect.

  • toFixed() - method converts a number into a string, keeping a specified number of decimals. It does not actually rounds up a number, it truncates the number.
  • Math.round(n) - rounds a number to the nearest integer. Thus turning:

0.5 -> 1; 0.05 -> 0

so if you want to round, say number 0.55555, only to the second decimal place; you can do the following(this is step-by-step concept):

  • 0.55555 * 100 = 55.555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0.56000
  • (0.56000).toFixed(2) -> 0.56

and this is the code:

(Math.round(number * 100)/100).toFixed(2);

Previous answers forgot to type the output as an Number again. There is several ways to do this, depending on your tastes.

+my_float.toFixed(2)


Number(my_float.toFixed(2))


parseFloat(my_float.toFixed(2))

This is not really CPU friendly, but :

Math.round(number*100)/100

works as expected.

use the below code.

alert(+(Math.round(number + "e+2")  + "e-2"));

Though we have many answers here with plenty of useful suggestions, each of them still misses some steps.
So here is a complete solution wrapped into small function:

function roundToTwoDigitsAfterComma(floatNumber) {
return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

Just in case you are interested how this works:

  1. Multiple with 100 and then do round to keep precision of 2 digits after comma
  2. Divide back into 100 and use toFixed(2) to keep 2 digits after comma and throw other unuseful part
  3. Convert it back to float by using parseFloat() function as toFixed(2) returns string instead

Note: If you keep last 2 digits after comma because of working with monetary values, and doing financial calculations keep in mind that it's not a good idea and you'd better use integer values instead.

I use this:

function round(value, precision) {


if(precision == 0)
return Math.round(value);


exp = 1;
for(i=0;i<precision;i++)
exp *= 10;


return Math.round(value*exp)/exp;
}

All the suggestions above do not seem to be working with all numbers (negative ones included)

  1. 0.075 => 0.08

  2. -0.075 => -0.08

  3. 0.005 => 0.01

  4. -0.005 => -0.01

    Math.sign(num) * (Math.round((Math.abs(num) + Number.EPSILON) * 1e2) / 1e2);

console.log((Math.random().toFixed(2)));

I'am use tofixd() still working ok