BigDecimal除法問題


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,偶數,舍去。)

 


免責聲明!

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



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