运算函数
- 加法 add()函数
- 减法subtract()函数
- 乘法multiply()函数
- 除法divide()函数
- 绝对值abs()函数
示例
BigDecimal num1 = new BigDecimal(100);
BigDecimal num2 = new BigDecimal(-100);
BigDecimal num3 = new BigDecimal("0.5");
BigDecimal num4 = new BigDecimal("0.7");
BigDecimal add = num1.add(num2);
BigDecimal subtract = num1.subtract(num2);
BigDecimal multiply = num3.multiply(num4);
BigDecimal divide = num3.divide(num4,2,BigDecimal.ROUND_UP);
BigDecimal abs = num2.abs();
System.out.println(add);
System.out.println(subtract);
System.out.println(multiply);
System.out.println(divide);
System.out.println(abs);
结果
0
200
0.35
0.72
100
除法中的舎入模式
1、ROUND_UP
直接丢弃保留位数后的值,并且最后一位加1。
该舍入模式使值变大。
2、ROUND_DOWN
直接丢弃保留位数后的值。
该舍入模式会减少计算值的大小。
3、ROUND_CEILING
如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。
该舍入模式使值变大。
4、ROUND_FLOOR
如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同。
该舍入模式会减少计算值的大小。
5、ROUND_HALF_UP
四舍五入。
如果舍弃部分 >= 5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。
6、ROUND_HALF_DOWN
五舍六入
如果舍弃部分 > 5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
7、ROUND_HALF_EVEN
银行家舍入。
四舍六入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
如果保留位数的最后一位为奇数,则入位,否则舍去。比如2.15、2.24、2.25在该舎入模式下都是2.2;2.26舎入后是2.3。
8、ROUND_UNNECESSARY
断言请求的操作具有精确的结果,因此不需要舍入(默认模式)。
如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。
注意事项
在使用BigDecimal做乘除运算时,要把浮点型变成字符串进行构造,比如num3、num4。因为不是所有的浮点数都能够被精确的表示成一个double 类型值,对于那些不能够被精确的表示成 double 类型的浮点值,它会被表示成与它最接近的double类型的值。所以,构造BigDecimal时必须要把浮点型变成字符串进行构造。