Java double转bigDecimal时精度丢失问题

使用new BigDecimal(double val)对doubel进行转换会导致转换后精度丢失

原因

BigDecimal的构造函数public BigDecimal(double val)会损失了double 参数的精度。jdk中已经明确不建议使用new BigDecimal(double value)这种形式的构造函数,而是使用new BigDecimal(Stringvalue) 或BigDecimal.valueof( double value)。

测试代码

        for (int i = 1; i < 100; i++){
            String str = i < 10? "0.0" + i: "0." + i;
            BigDecimal b1 = BigDecimal.valueOf(Double.valueOf(str));
            BigDecimal b2 = new BigDecimal(Double.valueOf(str));
            System.out.println("new BigDecimal(double val):  " + b1 + "        " + b1.doubleValue() + "          " + Double.valueOf(str));
            System.out.println("-----------------------");
            System.out.println("BigDecimal.valueof(double value): " + b2 + "        " + b2.doubleValue() + "          " + Double.valueOf(str));
            System.out.println("-----------------------");
        }

测试结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值