Java计算double精度问题

分析:

  1. 我们在一些计算的时候,double类型的数据,经常会有精度丢失问题。
    例如:
        System.out.println(0.09 + 0.01);
        System.out.println(1 - 0.32);
        System.out.println(1.015 * 100);
        System.out.println(1.301 / 100);
        //运行结果分别是:
        //0.09999999999999999
        //0.6799999999999999
        //101.49999999999999
        //0.013009999999999999
这样的数据往往不是我们想要的,看起来虽然很小,如果是关于金融的项目,后果就很严重了。
那么我们应该怎么解决此问题呢?
    查看Java的api,找到了BigDecimal这个类,可以解决这个问题。
        BigDecimal bd1 = new BigDecimal("0.09");
        BigDecimal bd2 = new BigDecimal("0.01");
        System.out.println(bd1.add(bd2));//加法

        BigDecimal bd3 = new BigDecimal("1");
        BigDecimal bd4 = new BigDecimal("0.32");
        System.out.println(bd3.subtract(bd4));//减法

        BigDecimal bd5 = new BigDecimal("1.015");
        BigDecimal bd6 = new BigDecimal("100");
        System.out.println(bd5.multiply(bd6));//乘法

        BigDecimal bd7 = new BigDecimal("1.301");
        BigDecimal bd8 = new BigDecimal("100");
        System.out.println(bd7.divide(bd8));//除法
输出结果为:
        0.10
        0.68
        101.500
        0.01301

完美的解决了上面的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值