Java 舍入法
傳統的四捨五入法
傳統的四捨五入法就是我們日常生活中所認識的四捨五入,看保留位的下一位數,大於或等於5就進位,否則捨去。
在 Java
中實現這種傳統的四捨五入法很幾種方法:
1. BigDecimal
與 RoundingMode
的配合
double f = 11123.5455;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, RoundingMode.HALF_UP).doubleValue();
setScale
方法用於設置精度,第一個參數表示保留的位數,第二個參數表示取捨方式,RoundingMode.HALF_UP
就是傳統的四捨五入。
2. DecimalFormat
DecimalFormat df = new DecimalFormat("#.00");
Double d = new Double(df.format(11123.5455));
.00
表示保留兩位小數
3. String.format()
double d = 11123.5455;
String result = String.format("%.2f",d);
d = new Double(result);
%.2f
表示保留兩位小數
銀行家舍入法
由美國的一位銀行家提出的舍入法,規則如下:
- 捨去位數值小於5時,直接捨去。
- 捨去位數值大於5時,進位後捨去。
- 當捨去位的數值等於5時,若5後面還有其他非0數值,則進位後捨去,若5後面是0時,則根據5前一位數的奇偶性來判斷,奇數進位,偶數捨去。
例如:
11.556 = 11.56 —— 捨去位大於5,進位
11.554 = 11.55 —— 捨去位小於5,捨去
11.5551 = 11.56 —— 捨去位等於5,後面還有非0數值,則進位後捨去
11.545 = 11.54 —— 捨去位等於5,後面無數值,前位爲偶數應捨去
11.555 = 11.56 —— 捨去位等於5,後面無數值,前位爲奇數應進位
在 Java
中,可以通過 BigDecimal
與 RoundingMode
來表達這種銀行家舍入法:
BigDecimal d = new BigDecimal(100000);//存款
BigDecimal r = new BigDecimal(0.001875*3);//利息
BigDecimal i = d.multiply(r).setScale(2, RoundingMode.HALF_EVEN);//使用銀行家算法