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 种变体),该集合是一个非详尽的列表,并且包含一些基本示例。