Java舍入法

Java 舍入法

傳統的四捨五入法

傳統的四捨五入法就是我們日常生活中所認識的四捨五入,看保留位的下一位數,大於或等於5就進位,否則捨去。

Java 中實現這種傳統的四捨五入法很幾種方法:

1. BigDecimalRoundingMode 的配合

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 中,可以通過 BigDecimalRoundingMode 來表達這種銀行家舍入法:

BigDecimal d = new BigDecimal(100000);//存款
BigDecimal r = new BigDecimal(0.001875*3);//利息
BigDecimal i = d.multiply(r).setScale(2, RoundingMode.HALF_EVEN);//使用銀行家算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章