BigDecimal的使用

在计算与金额有关的数据时,涉及到精度问题,所以建议使用BigDecimal。

一、BigDecimal转换的精度问题

        BigDecimal num1=new BigDecimal(0.05);
        BigDecimal num2=BigDecimal.valueOf(0.08);

在将double类型的数据转换为BigDecimal时,直接使用new BigDecimal() 的方式使用alibaba代码规范会提示如下。因为当数据比较精密时直接转换会造成精度丢失。float 浮点数类似。

二、BigDecimal的加减乘除

加法 add()函数 减法subtract()函数
乘法multipy()函数 除法divide()函数 绝对值abs()函数

        BigDecimal res1=num1.add(num2);
        BigDecimal res2=num1.subtract(num2);
        //setScale() 设置小数点后面保留几位小数
        BigDecimal res3= num1.multiply(num2).setScale(2,BigDecimal.ROUND_UP);
        BigDecimal res4=num1.divide(num2,2,BigDecimal.ROUND_UP);
        BigDecimal res5=num1.abs();

三、除法divide()参数使用

使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错

我们可以看到divide函数的源码参数

public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

// BigDecimal  divisor 除数,int scale  精度小数位,int roundingMode 舍入模式 

具体舍入模式有8种,根据业务需求合理选择即可。这里就不一一解释。

四、BigDecimal比较大小

判断是否为0,使用前面一种方式返回false,后面一种方式返回true。这个地方本人还踩过坑。所以建议使用 coparaTo() 函数比较大小

//使用compareTo方法比较
//注意:两个比较的参数均不能为null,否则会报空指针
  BigDecimal bigDecimal=new BigDecimal(String.valueOf(0.000000000000));
        System.out.println(bigDecimal.equals(BigDecimal.ZERO));
        System.out.println(bigDecimal.compareTo(BigDecimal.ZERO)==0);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值