2010-10-15 26 views
0

任何人都知道這樣的功能在JavaScript?如何在js中將數字30.006649999999994轉換爲30.01?

+12

if(x == 30.006649999999994)x = 30.01;它將按照要求正常工作。 – 2010-10-15 14:15:18

+1

你在談論舍入規則:中間點是向上還是向下?對於所有情況來說,重要的是四捨五入的工作。 – 2010-10-15 14:16:21

回答

5

只需選擇您所需的精度和round功能一起使用乘法/除法。

在你的情況,如果要舍入到第二個十進制數字,你可以做

Math.round(value*100)/100 
+0

這可能會導致「* 100」導致精度丟失的大值失敗。例如。 'Math.round(100000000000000.33 * 100)/ 100'返回'100000000000000.31',儘管'.33'可以表示爲一個浮點數。 – bobince 2010-10-15 15:14:54

5
num = 30.006649999999994; 
result = num.toFixed(2); // result will equal 30.01 

這裏有一個sample of this code over at JSBin

+2

-1爲什麼選票上漲? toFixed()返回一個字符串。 – 2010-10-15 14:20:33

+1

不幸的是,'toFixed()'在IE中瘋狂破碎。例如。 '(1.9).toFixed(0)'是'2',但是'(0.9).toFixed(0)'是'0' – bobince 2010-10-15 15:00:43

+1

@Ivo:感謝downvote!答案僅僅是爲了向提問者說明如何執行正在尋找的**四捨五入。我沒有聲稱它會返回一個數字值。也許你想降低其他'.toFixed'解決方案。這會讓你對StackOverflow的挑剔問題感覺更好。祝你今天愉快! – 2010-10-15 15:01:00

0
num = 30.006649999999994; 
num2 = num.toFixed(2); 
2

我總是用我自己的回合函數,該函數。

function round(value, precision){     
    if(precision){            
     var exponent = Math.pow(10, precision);     
     return Math.round(value * exponent)/exponent;   
    }else{              
     return Math.round(value);        
    }                
}                 

你可以這樣調用:

round(30.006649999999994, 2); 
0

額定上升p.campbell答案,它看起來並不像我可以在別人的答案尚未置評。

但是,所有你需要做的一個數字是添加parseFloat();

num = 30.006649999999994; result = parseFloat(num.toFixed(2)); //結果等於30.01

+0

它更短嗎?不。它是否仍然會調用不必要的類型轉換?是。 – 2010-10-15 15:04:34