double 转 BigDecimal 精度问题

请看图:

    //double 转 BigDecimal 精度测试
    @Test
    public void a (){
        Double Dou = 5.56;
        BigDecimal bigDou1 = new BigDecimal(Dou);
        BigDecimal bigDou2 = BigDecimal.valueOf(Dou);
        log.info("Double转BigDecimal,使用构造方法转化="+bigDou1);//5.55999999999999960920149533194489777088165283203125
        log.info("Double转BigDecimal,使用字符串形式转化="+bigDou2);//5.56
    }

很明显,经过 double 转 BigDecimal 后,我们最初的值已经发生变化,所以通常我们在做类型转换的时候推荐使用 BigDecimal.valueOf(...);

分析:JDK1.8 源码

BigDecimal bigDou1 = new BigDecimal(Dou);

这个转换结果是double的二进制浮点值的精确十进制表示,其值得结果不是我们可以预测的,如上测试类,经过类型转换:5.56变成了5.55999999999999960920149533194489777088165283203125。是因为转化过程默认使用了精度和舍入模式:

public BigDecimal(double val, MathContext

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值