一、BigDecimal加法介紹
BigDecimal是Java中用來處理高精度數字計算的類,可以做任意精度的浮點數運算,比默認的double和float類型具有更高的進度和精度。
在進行BigDecimal加法運算時,需要使用add()方法,在使用add()方法時需要注意兩個數的小數位數,以及舍入模式,舍入模式包括ROUND_CEILING、ROUND_DOWN、ROUND_FLOOR、ROUND_HALF_DOWN、ROUND_HALF_EVEN、ROUND_HALF_UP、ROUND_UNNECESSARY、ROUND_UP,每種舍入模式的處理方式都不同。
二、BigDecimal加法的使用實例
import java.math.BigDecimal; public class TestBigDecimal { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("123.456"); BigDecimal num2 = new BigDecimal("789.123"); BigDecimal result = num1.add(num2); //加法運算 System.out.println(result); } }
運行上述程序,輸出結果為:912.579,表示123.456與789.123相加的結果為912.579。
三、BigDecimal加法的小數位數處理
在進行BigDecimal加法運算時,需要注意兩個數的小數位數,如果兩個數小數位數不一致,需要進行小數位數的處理。
在處理小數位數時,可以使用setScale()方法來指定小數的位數,setScale()方法有兩個參數,第一個參數表示小數保留的精度,第二個參數表示舍入方式,其中ROUND_HALF_UP表示四捨五入。
import java.math.BigDecimal; public class TestBigDecimal { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("123.456789"); BigDecimal num2 = new BigDecimal("789.123"); BigDecimal result = num1.add(num2); //加法運算 result = result.setScale(2, BigDecimal.ROUND_HALF_UP); //保留兩位小數,四捨五入 System.out.println(result); } }
運行上述程序,輸出結果為:912.58,表示123.456789與789.123相加的結果為912.58,保留了兩位小數,並且進行了四捨五入處理。
四、BigDecimal加法的舍入模式處理
在進行BigDecimal加法運算時,舍入模式也是一個非常重要的因素,舍入模式的選擇將直接影響運算結果。
常用的舍入模式有6種,它們分別是ROUND_CEILING、ROUND_DOWN、ROUND_FLOOR、ROUND_HALF_DOWN、ROUND_HALF_EVEN、ROUND_HALF_UP、ROUND_UNNECESSARY、ROUND_UP。
- ROUND_CEILING:向正無窮舍入,如果為負數則向零方向舍入;
- ROUND_DOWN:向零方向舍入;
- ROUND_FLOOR:向負無窮舍入,如果為負數則向負無窮方向舍入;
- ROUND_HALF_DOWN:向最近的數字舍入,如果有兩個數字 equally close,那麼選擇向下舍入;
- ROUND_HALF_EVEN:向最近的數字舍入,如果有兩個數字 equally close,那麼選擇偶數;
- ROUND_HALF_UP:向最近的數字舍入,如果有兩個數字 equally close,那麼選擇向上舍入;
- ROUND_UNNECESSARY:斷言請求操作具有精確的結果,因此不需要舍入。如果對獲得精確結果的操作指定此舍入模式,則拋出ArithmeticException;
- ROUND_UP:向遠離零的方向舍入。
import java.math.BigDecimal; public class TestBigDecimal { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("123.456"); BigDecimal num2 = new BigDecimal("789.123"); BigDecimal result1 = num1.add(num2, BigDecimal.ROUND_CEILING); //使用ROUND_CEILING方法進行舍入 System.out.println(result1); BigDecimal result2 = num1.add(num2, BigDecimal.ROUND_DOWN); //使用ROUND_DOWN方法進行舍入 System.out.println(result2); BigDecimal result3 = num1.add(num2, BigDecimal.ROUND_FLOOR); //使用ROUND_FLOOR方法進行舍入 System.out.println(result3); BigDecimal result4 = num1.add(num2, BigDecimal.ROUND_HALF_DOWN); //使用ROUND_HALF_DOWN方法進行舍入 System.out.println(result4); BigDecimal result5 = num1.add(num2, BigDecimal.ROUND_HALF_EVEN); //使用ROUND_HALF_EVEN方法進行舍入 System.out.println(result5); BigDecimal result6 = num1.add(num2, BigDecimal.ROUND_HALF_UP); //使用ROUND_HALF_UP方法進行舍入 System.out.println(result6); BigDecimal result7 = num1.add(num2, BigDecimal.ROUND_UNNECESSARY); //使用ROUND_UNNECESSARY方法進行舍入 System.out.println(result7); BigDecimal result8 = num1.add(num2, BigDecimal.ROUND_UP); //使用ROUND_UP方法進行舍入 System.out.println(result8); } }
運行上述程序,輸出結果如下:
- 912.57
- 912.579
- 912.57
- 912.58
- 912.58
- 912.58
- Exception in thread “main” java.lang.ArithmeticException: Rounding necessary
- 912.58
從輸出結果可以看出,不同的舍入模式處理結果並不相同。
五、BigDecimal加法的異常處理
在進行BigDecimal加法運算時,可能會出現一些異常情況,例如兩個BigDecimal數值可能為null,此時就需要進行異常處理。
import java.math.BigDecimal; public class TestBigDecimal { public static void main(String[] args) { BigDecimal num1 = null; BigDecimal num2 = new BigDecimal("789.123"); if (num1 == null) { num1 = BigDecimal.ZERO; //如果num1為null則將其賦為0 } BigDecimal result = num1.add(num2); //加法運算 System.out.println(result); } }
運行上述程序,輸出結果為:789.123,表示0與789.123相加的結果為789.123。
六、總結
本文詳解了Java中BigDecimal加法的多個方面,包括加法介紹、使用實例、小數位數處理、舍入模式處理、異常處理等內容。在實際開發中,選擇合適的舍入模式以及小數位數處理非常重要,開發者應當根據實際需要選擇合適的舍入模式,並且注意保留小數位數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239917.html