2011-07-07 28 views
0

通常,我們需要對最小貨幣粒度(如0.05)進行數量化。按特定步驟進行的Java四捨五入

我面對Java中的溢出問題,似乎已經解決了吧...希望你能查看它是否是一個正確的解決辦法...有出現在這個論壇以及其他解決方案...

public static float round(float input, float step) { 

float a = Math.round(input/step) * step; 

//Can't return "a" directly because of overflow problem in some cases 
int b = Math.round(a * 100); 

return (float) (float)b/100f; } 

但這隻會爲2位小數步工作(如0.05),因爲我硬編碼100這裏...

+0

什麼「溢出問題」? –

+3

@Sumedh,我不會使用'float',除非我真的必須這樣做,它有高達10億倍於double的舍入誤差。 99%的時間使用'double'是更好的選擇。 –

+2

@Peter:任何地方單詞「貨幣」出現,浮動和雙重是一個不錯的選擇 –

回答

8

這將爲任何步長的工作:

public static float round(float input, float step) 
{ 
    return ((Math.round(input/step)) * step); 
} 
+0

有人喜歡括號) – ycomp

5

如果與您合作洪特小數點紅色,float不是您需要的類型。我可以將您重定向到BigDecimal