1.第一種 四舍五入
方法1:
System.out.println(Math.round(66.5));
方法2:
BigDecimal b = new BigDecimal(120.00);
//經典的四舍五入。
double f1 = b.setScale(0,RoundingMode.HALF_UP).doubleValue();
第二種 ,四舍六入五平分(銀行家算法)
方法1:
NumberFormat nfFormat = NumberFormat.getInstance();
nfFormat.setMaximumFractionDigits(0);
System.out.println(nfFormat.format(64.5));//前一位是偶數,則不進位。結果是64。
System.out.println(nfFormat.format(65.5));//前一位是基數,則進位。結果是66。
方法2:
BigDecimal b = new BigDecimal(65.5);
double f1 = b.setScale(0,RoundingMode.HALF_EVEN).doubleValue();
System.out.println(f1);
我們都知道銀行的盈利渠道主要是利息差,它從儲戶手里收集資金,然后放貸出去,期間產生的利息差就是銀行所獲得的利潤。如果我們采用平常四舍五入的規則話,這里采用每10筆存款利息計算作為模型,如下:
四舍:0.000、0.001、0.002、0.003、0.004。這些舍的都是銀行賺的錢。
五入:0.005、0.006、0.007、0.008、0.009。這些入的都是銀行虧的錢,分別為:0.005、0.004、.003、0.002、0.001。
所以對於銀行來說它的盈利應該是0.000 + 0.001 + 0.002 + 0.003 + 0.004 - 0.005 - 0.004 - 0.003 - 0.002 - 0.001 = -0.005。從結果中可以看出每10筆的利息銀行可能就會損失0.005元,千萬別小看這個數字,這對於銀行來說就是一筆非常大的損失。面對這個問題就產生了如下的銀行家涉入法了。該算法是由美國銀行家提出了,主要用於修正采用上面四舍五入規則而產生的誤差。如下:
舍去位的數值小於5時,直接舍去。
舍去位的數值大於5時,進位后舍去。
當舍去位的數值等於5時,若5后面還有其他非0數值,則進位后舍去,若5后面是0時,則根據5前一位數的奇偶性來判斷,奇數進位,偶數舍去。
對於上面的規則我們舉例說明
11.556 = 11.56 ------六入
11.554 = 11.55 -----四舍
11.5551 = 11.56 -----五后有數進位
11.545 = 11.54 -----五后無數,若前位為偶數應舍去
11.555 = 11.56 -----五后無數,若前位為奇數應進位
下面實例是使用銀行家舍入法:
public static void main(String[] args) {
BigDecimal d = new BigDecimal(100000); //存款
BigDecimal r = new BigDecimal(0.001875*3); //利息
BigDecimal i = d.multiply(r).setScale(2,RoundingMode.HALF_EVEN); //使用銀行家算法
System.out.println("季利息是:"+i);
}
Output:
季利息是:562.50
在上面簡單地介紹了銀行家舍入法,目前java支持7中舍入法:
1、 ROUND_UP:遠離零方向舍入。向絕對值最大的方向舍入,只要舍棄位非0即進位。
2、 ROUND_DOWN:趨向零方向舍入。向絕對值最小的方向輸入,所有的位都要舍棄,不存在進位情況。
3、 ROUND_CEILING:向正無窮方向舍入。向正最大方向靠攏。若是正數,舍入行為類似於ROUND_UP,若為負數,舍入行為類似於ROUND_DOWN。Math.round()方法就是使用的此模式。
4、 ROUND_FLOOR:向負無窮方向舍入。向負無窮方向靠攏。若是正數,舍入行為類似於ROUND_DOWN;若為負數,舍入行為類似於ROUND_UP。
5、 HALF_UP:最近數字舍入(5進)。這是我們最經典的四舍五入。
6、 HALF_DOWN:最近數字舍入(5舍)。在這里5是要舍棄的。
7、 HAIL_EVEN:銀行家舍入法。
提到四舍五入那么保留位就必不可少了,在java運算中我們可以使用多種方式來實現保留位。
其實進位的數字從1-9個數字。這些數字出現的機率是一樣的。
正常的四舍五入。
1-4會被舍去。 1,2,3,4 一共4個數字。
5-9會被進位。5,6,7,8,9 一共5個數字。
正常的四舍五入會有4個數字舍去,5個數字會被進位。銀行家的算法就是要更公平的進行取舍。
四舍六入五平分:
1,2,3,4 舍去。
6,7,8,9進位。
5 這個數字看前面的數字決定。如果是偶數,則不進位。如果是奇數則進位。
四舍六入五平分例子:
61.5 =62 。 小數點前面是1(奇數),則后面的0.5進位。結果是62。
62.5 = 62 。 小數點前面是2(偶數),則后面的0.5不進位。結果是62。
簡單的說,就是:四舍六入五考慮,五后非空就進一,五后為空看奇偶,五前為偶應舍去,五前為奇要進一