金额数据处理

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等枚举类
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值