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

运算函数

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

发布了92 篇原创文章 · 获赞 4 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/DingKG/article/details/103453259