Java 四舍五入和四舍六入五平分,銀行家舍入


 

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。

 

簡單的說,就是:四舍六入五考慮,五后非空就進一,五后為空看奇偶,五前為偶應舍去,五前為奇要進一

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM