BigDecimal類的主要功能是進行小數的大數計算,而且最重要的是可以精確到指定的四舍五入位數。
如果要進行四舍五入的操作,則必須依靠以下的方法:
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
scale:表示四舍五入的位數
在上面的例子中,我們使用了BigDecimal類,並且采用setScale方法設置了精度,同時傳遞了一個RoundingMode.HALF_EVEN參數表示使用銀行家舍入法則進行近似計算,BigDecimal和RoundingMode是一個絕配,想要采用什么舍入模式使用RoundingMode設置即可。目前Java支持以下七種舍入方式:
ROUND_UP: 遠離零方向舍入。
向遠離0的方向舍入,也就是說,向絕對值最大的方向舍入,只要舍棄位非0即進位。
ROUND_DOWN:趨向零方向舍入。
向0方向靠攏,也就是說,向絕對值最小的方向輸入,注意:所有的位都舍棄,不存在進位情況。
ROUND_CEILING:向正無窮方向舍入。
向正最大方向靠攏,如果是正數,舍入行為類似於ROUND_UP;如果為負數,則舍入行為類似於ROUND_DOWN。注意:Math.round方法使用的即為此模式。
ROUND_FLOOR:向負無窮方向舍入。
向負無窮方向靠攏,如果是正數,則舍入行為類似於 ROUND_DOWN;如果是負數,則舍入行為類似於 ROUND_UP。
HALF_UP: 最近數字舍入(5進)。
這就是我們最最經典的四舍五入模式。
HALF_DOWN:最近數字舍入(5舍)。
在四舍五入中,5是進位的,而在HALF_DOWN中卻是舍棄不進位。
HALF_EVEN :銀行家算法。
在普通的項目中舍入模式不會有太多影響,可以直接使用Math.round方法,但在大量與貨幣數字交互的項目中,一定要選擇好近似的計算模式,盡量減少因算法不同而造成的損失。(銀行家算法就是,假如保留兩位,第三位大於5,則進1;小於5,舍去;第三位為奇數,進1,偶數,舍去。)