Java的四捨五入運算

背景

最近接觸銀行項目,發如今作金額四捨五入的時候並無傳統意義上那麼簡單,銀行爲了儘可能縮減在這方面的虧損,有一個單獨的銀行家舍入法。java

傳統的四捨五入運算

System.out.println("12.5的四捨五入值:" + Math.round(12.5));
System.out.println("-12.5的四捨五入值:" + Math.round(-12.5));

輸出結果:code

12.5的四捨五入值:13
-12.5的四捨五入值:-12

緣由:orm

Math.round是在原來的數字的基礎上+0.5而後向下取整。ip

銀行家舍入法

捨去位的數值小於5時,直接捨去。ci

捨去位的數值大於5時,進位後捨去。form

當捨去位的數值等於5時,若5後面還有其餘非0數值,則進位後捨去,若5後面是0時,則根據5前一位數的奇偶性來判斷,奇數進位,偶數捨去。基礎

舉例說明:方法

11.556 = 11.56 ------六入im

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(Double.toString(100000));//存款
	BigDecimal r = new BigDecimal(Double.toString(0.03));//利息
	BigDecimal i = d.multiply(r).setScale(2, RoundingMode.HALF_EVEN); 
	System.out.println("利潤是:"+i);
}

輸出結果:

利潤是:3000.00

Java支持的四捨五入方式參數

一、 ROUND_UP:遠離零方向舍入。向絕對值最大的方向舍入,只要捨棄位非0即進位。

二、 ROUND_DOWN:趨向零方向舍入。向絕對值最小的方向輸入,全部的位都要捨棄,不存在進位狀況。

三、 ROUND_CEILING:向正無窮方向舍入。向正最大方向靠攏。如果正數,舍入行爲相似於ROUND_UP,若爲負數,舍入行爲相似於ROUND_DOWN。Math.round()方法就是使用的此模式。

四、 ROUND_FLOOR:向負無窮方向舍入。向負無窮方向靠攏。如果正數,舍入行爲相似於ROUND_DOWN;若爲負數,舍入行爲相似於ROUND_UP。

五、 HALF_UP:最近數字舍入(5進)。這是咱們最經典的四捨五入。

六、 HALF_DOWN:最近數字舍入(5舍)。在這裏5是要捨棄的。

七、 HAIL_EVEN:銀行家舍入法。

附:格式化小數到幾位

java.text.DecimalFormat df = new java.text.DecimalFormat(」#.00″);
df.format(你要格式化的數字);
相關文章
相關標籤/搜索