BigDecimal 的數學運算

此示例顯示如何使用 BigDecimals 執行基本數學運算。

1.Addition

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a + b
BigDecimal result = a.add(b);
System.out.println(result);

結果:12

2.Subtraction

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a - b
BigDecimal result = a.subtract(b);
System.out.println(result);

結果:-2

3.Multiplication

當乘以兩個 BigDecimal 時,結果將具有等於運算元的比例之和的比例。

BigDecimal a = new BigDecimal("5.11");
BigDecimal b = new BigDecimal("7.221");

//Equivalent to result = a * b
BigDecimal result = a.multiply(b);
System.out.println(result);

結果:36.89931

要更改結果的比例,請使用過載的 multiply 方法,該方法允許傳遞 MathContext - 一個描述運算子規則的物件,特別是結果的精度和舍入模式。有關可用舍入模式的更多資訊,請參閱 Oracle 文件。

BigDecimal a = new BigDecimal("5.11");
BigDecimal b = new BigDecimal("7.221");

MathContext returnRules = new MathContext(4, RoundingMode.HALF_DOWN);

//Equivalent to result = a * b
BigDecimal result = a.multiply(b, returnRules);
System.out.println(result);

結果:36.90

4.Division

除了其他算術運算之外,分割槽比較複雜,例如考慮以下示例:

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

BigDecimal result = a.divide(b);
System.out.println(result);

我們希望這會給出類似的東西:0.7142857142857143,但我們會得到:

結果: java.lang.ArithmeticException:非終止十進位制擴充套件; 沒有確切的可表示的小數結果。

如果我想將 5 除以 2,那麼當結果將是終止小數時,這將非常有效。但是對於那些在分割時給出非終止結果的數字,我們將得到一個 ArithmeticException。在現實世界場景中,無法預測分割期間會遇到的值,因此我們需要為 BigDecimal 分割槽指定 ScaleRounding Mode 。有關 Scale 和 Rounding Mode 的更多資訊,請參閱 Oracle Documentation

例如,我可以這樣做:

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a / b (Upto 10 Decimal places and Round HALF_UP)
BigDecimal result = a.divide(b,10,RoundingMode.HALF_UP);
System.out.println(result);

結果:0.7142857143

5.餘數或模數

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a % b
BigDecimal result = a.remainder(b);
System.out.println(result);

結果:5

6.Power

BigDecimal a = new BigDecimal("5");

//Equivalent to result = a^10    
BigDecimal result = a.pow(10);
System.out.println(result);

結果:9765625

7.Max

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = MAX(a,b) 
BigDecimal result = a.max(b);
System.out.println(result);

結果:7

8.Min

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = MIN(a,b) 
BigDecimal result = a.min(b);
System.out.println(result);

結果:5

9.Move Point to Left

BigDecimal a = new BigDecimal("5234.49843776");

//Moves the decimal point to 2 places left of current position
BigDecimal result = a.movePointLeft(2);
System.out.println(result);

結果:52.3449843776

10.Move Point to Right

BigDecimal a = new BigDecimal("5234.49843776");

//Moves the decimal point to 3 places right of current position
BigDecimal result = a.movePointRight(3);
System.out.println(result);

結果:5234498.43776

對於上述示例,還有更多選項和引數組合(例如,除法方法有 6 種變體),該集合是一個非詳盡的列表,並且包含一些基本示例。