2008年9月23日 星期二

[備忘記]Java內如何做四捨五入?

double number = 123.456123;
new BigDecimal(number, new MathContext(2, RoundingMode.HALF_UP)).doubleValue();
結果:120.0

new BigDecimal(number, new MathContext(5, RoundingMode.HALF_UP)).doubleValue();
結果:123.46

這是因為粗體字的設定代表返回數字的精度位數,由準確返回值的最左端數字開始計算。

所以要動態的取得整數位數要另外設計:
public int getIntegerLength(double number){
String[] s = new Double(number).toString().split("\\.");
return s[0].equals("0") ? 0 : s[0].length();
}

new BigDecimal(number, new MathContext(getIntegerLength(number) + 2, RoundingMode.HALF_UP)).doubleValue();

如此粗體字部分就可以自行設定要取得小數點後幾位的四捨五入了。