bigdecimal更精確的浮點處理方式


Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變量double可以處理16位內有效數,超過16位,double可能會出現內存溢出。

 

導入包:

import  java.math.BigDecimal;

 

1.初始化:

創建一個數值為0的BigDecimal  

BigDecimal  YSJE = BigDecimal.ZERO;

BigDecimal  SUM = new BigDecimal(0);

創建一個數值不為0的BigDecimal   

BigDecimal  SUM = new BigDecimal(10.00);

 

2.運算

SUM = SUM.add(YSJE);//

String TAX ="10.00";

SUM = SUM.subtract(new BigDecimal(TAX));//

 

add(BigDecimal)        BigDecimal對象中的值相加,然后返回這個對象。

subtract(BigDecimal) BigDecimal對象中的值相減,然后返回這個對象。

multiply(BigDecimal)  BigDecimal對象中的值相乘,然后返回這個對象。

divide(BigDecimal)     BigDecimal對象中的值相除,然后返回這個對象。

toString()                將BigDecimal對象的數值轉換成字符串。

doubleValue()          將BigDecimal對象中的值以雙精度數返回。

floatValue()             將BigDecimal對象中的值以單精度數返回。

longValue()             將BigDecimal對象中的值以長整數返回。

intValue()               將BigDecimal對象中的值以整數返回。

 

3.做除數時需要給divide設置精確的小數點

通過BigDecimal的divide方法進行除法時當不整除,出現無限循環小數時,就會拋異常的,異常如下:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)

解決之道:就是給divide設置精確的小數點divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)

 

4.格式化小數點

BigDecimal.setScale()方法用於格式化小數點

setScale(1)表示保留一位小數,默認用四舍五入方式

setScale(1,BigDecimal.ROUND_DOWN)直接刪除多余的小數位,如2.35會變成2.3

setScale(1,BigDecimal.ROUND_UP)進位處理,2.35變成2.4

setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35變成2.4

setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35變成2.3,如果是5則向下舍


免責聲明!

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



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