BigDecimal加减乘除计算及舎入模式

本文详细介绍了BigDecimal类的加法、减法、乘法、除法及绝对值运算函数,包括add()、subtract()、multiply()、divide()和abs()。通过示例展示了如何使用这些函数进行精确的数学运算,并解释了不同舍入模式对除法运算的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运算函数

  • 加法 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时必须要把浮点型变成字符串进行构造。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值