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