最近接觸銀行項目,發如今作金額四捨五入的時候並無傳統意義上那麼簡單,銀行爲了儘可能縮減在這方面的虧損,有一個單獨的銀行家舍入法。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
一、 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(你要格式化的數字);