一、算术运算
1.1、加法:add()
用于两个 BigDecimal
值的相加操作。
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("20");
BigDecimal sum = a.add(b); // 结果为 30
1.2、减法:subtract()
用于两个 BigDecimal
值的相减操作。
BigDecimal c = new BigDecimal("50");
BigDecimal d = new BigDecimal("30");
BigDecimal difference = c.subtract(d); // 结果为 20
1.3、乘法:multiply()
用于两个 BigDecimal
值的相乘操作。
BigDecimal e = new BigDecimal("5");
BigDecimal f = new BigDecimal("6");
BigDecimal product = e.multiply(f); // 结果为 30
1.4、除法:divide()
用于两个 BigDecimal
值的相除操作,需指定舍入模式。
BigDecimal g = new BigDecimal("10");
BigDecimal h = new BigDecimal("3");
BigDecimal quotient = g.divide(h, 2, BigDecimal.ROUND_HALF_UP); // 结果为 3.33
1.5、绝对值:abs()
获取 BigDecimal
值的绝对值。
BigDecimal i = new BigDecimal("-15.5");
BigDecimal absoluteValue = i.abs(); // 结果为 15.5
二、四舍五入(setScale()
方法的舍入模式)
2.1、ROUND_DOWN(截断)
直接舍弃多余位数,不进位。
BigDecimal value1 = new BigDecimal("3.222452").setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(value1); // 输出:3.22
BigDecimal value2 = new BigDecimal("-3.222452").setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(value2); // 输出:-3.22
2.2、ROUND_UP(进位)
无论正负,只要舍弃部分不为零,均进位。
BigDecimal value3 = new BigDecimal("3.236452").setScale(2, BigDecimal.ROUND_UP);
System.out.println(value3); // 输出:3.24
BigDecimal value4 = new BigDecimal("-3.226452").setScale(2, BigDecimal.ROUND_UP);
System.out.println(value4); // 输出:-3.23
2.3、ROUND_CEILING(朝正无穷方向舍入)
正数:等同于
ROUND_UP
。负数:等同于
ROUND_DOWN
。
BigDecimal value5 = new BigDecimal("3.236452").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(value5); // 输出:3.24
BigDecimal value6 = new BigDecimal("-3.226452").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(value6); // 输出:-3.22
2.4、ROUND_FLOOR(朝负无穷方向舍入)
正数:等同于
ROUND_DOWN
。负数:等同于
ROUND_UP
。
BigDecimal value7 = new BigDecimal("3.236452").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(value7); // 输出:3.23
BigDecimal value8 = new BigDecimal("-3.226452").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(value8); // 输出:-3.23
2.5、ROUND_HALF_UP(四舍五入)
舍弃部分大于或等于 0.5
时进位,否则截断。
BigDecimal value9 = new BigDecimal("3.235452").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(value9); // 输出:3.24
BigDecimal value10 = new BigDecimal("-3.225").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(value10); // 输出:-3.23
2.6、ROUND_HALF_DOWN(四舍五入严格版)
舍弃部分大于 0.5
时进位,等于 0.5
时截断。
BigDecimal value11 = new BigDecimal("3.234452").setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(value11); // 输出:3.23
BigDecimal value12 = new BigDecimal("-3.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(value12); // 输出:-3.22
示例代码(综合应用)
// 示例:计算总内存(结合加减乘除与四舍五入)
BigDecimal memory = new BigDecimal("1024");
BigDecimal decimal = new BigDecimal("0.1");
BigDecimal totalMemory = memory
.subtract(decimal.multiply(memory)) // 1024 - (0.1 * 1024)
.divide(new BigDecimal("1024"), 0, BigDecimal.ROUND_DOWN); // 结果取整
System.out.println(totalMemory); // 输出:9
注意事项:
避免浮点数直接构造:使用
new BigDecimal("字符串")
而非new BigDecimal(double)
,以避免精度问题。舍入模式选择:根据业务需求选择合适的舍入模式(如财务场景通常使用
ROUND_HALF_UP
)。setScale()
参数:需指定保留的小数位数和舍入模式,否则可能抛出异常。
通过清晰的标题层级和示例代码,内容更易阅读和理解。
评论