BigDecimal
- flot和double进行数字计算时会有精度上的丢失,在一般计算中是没有问题的。
- 涉及到金额上的计算就会产生比较大的影响,这时推荐使用
java.math
包的BigDecimal
类。 - 下面介绍BigDecimal常用的方法。
类常用方法
方法 | 说明 |
---|---|
BigDecimal(double val) | 使用double数值构造BigDecimal对象 |
BigDecimal(int val) | 使用int数值构造BigDecimal对象 |
BigDecimal(String val) | 使用String数值构造BigDecimal对象 |
BigDecimal add(BigDecimal param) | 加法计算 |
BigDecimal subtract(BigDecimal param) | 减法计算 |
BigDecimal multiply(BigDecimal param) | 乘法计算 |
BigDecimal divide(BigDecimal param) | 除法计算,需要指定结果精度处理方式 |
除法小数位
结果小数位处理方式代码 | 效果 |
---|---|
ROUND_UP | 小数部分大于0就进1 |
ROUND_DOWN | 保留指定位数的小数 |
ROUND_HALF_UP | 指定小数位四舍五入 |
ROUND_HALF_DOWN | 指定小数位五舍六入 |
ROUND_CEILING | 向正无穷方向舍入 |
ROUND_FLOOR | 向负无穷方向舍入 |
ROUND_HALF_EVEN | 向上下数字差值小的一边舍入; 如果上下差值一样则按照: 奇数使用ROUND_HALF_UP, 偶数使用ROUND_HALF_DOWN |
ROUND_UNNECESSARY | 计算结果是精确的,不需要舍入模式 |
示例代码
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal(3.22);
BigDecimal num2 = new BigDecimal("5.66");
// 数据转换
System.out.println("num1 = " + num1);
System.out.println("num2 doubleValue = " + num2.doubleValue());
// 加法
System.out.println("num1 + num2 = " + num1.add(num2).doubleValue());
// 减法
System.out.println("num1 - num2 = " + num1.subtract(num2).doubleValue());
// 乘法
System.out.println("num1 * num2 = " + num1.multiply(num2).doubleValue());
// 除法并且四舍五入
System.out.println("num1 / num2 = " + num1.divide(num2, BigDecimal.ROUND_HALF_UP).doubleValue());
// 除法并且指定小数位数的四舍五入
System.out.println("num1 / num2 = " + num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP).doubleValue());
// 更多除法结果处理方式参考
// BigDecimal.ROUND_XXX等枚举类
}