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 分割槽指定 Scale 和 Rounding 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 種變體),該集合是一個非詳盡的列表,並且包含一些基本示例。