BigDecimal相同值compareTo结果不是0问题记录

文章讲述了在Java中使用BigDecimal进行数值比较时出现的精度问题,由于直接用double构造BigDecimal可能导致精度丢失,从而影响比较结果。通过将数字转换为字符串来创建BigDecimal对象可以解决这个问题。
摘要由CSDN通过智能技术生成
private String getStr(BigDecimal a) {
        String str;
        BigDecimal b = new BigDecimal(0.3);
        BigDecimal c = new BigDecimal(-0.8);
        if (a.compareTo(b) > 0) {
            str = "小";
        } else if (a.compareTo(b) <= 0 && a.compareTo(c) >= 0) {
            str = "中";
        } else {
            str = "大";
        }
        return str;
    }

a=0.3时应返回 中 ,但是却返回了 小,输出a.compareTo(b)结果发现是1

此时再次输出a和b的值

private String getStr(BigDecimal a) {
        String str;
        BigDecimal b = new BigDecimal(0.3);
        BigDecimal c = new BigDecimal(-0.8);
        System.out.println(a+":"+b);
        if (a.compareTo(b) > 0) {
            str = "小";
        } else if (a.compareTo(b) <= 0 && a.compareTo(c) >= 0) {
            str = "中";
        } else {
            str = "大";
        }
        return str;
    }

打印结果为 0.3:0.299999999999999988897769753748434595763683319091796875

new BigDecimal(0.3) 比较时丢失精度,所以需要修改为

private String getStr(BigDecimal a) {
        String str;
        BigDecimal b = new BigDecimal("0.3");
        BigDecimal c = new BigDecimal("-0.8");
        System.out.println(a+":"+b);
        if (a.compareTo(b) > 0) {
            str = "小";
        } else if (a.compareTo(b) <= 0 && a.compareTo(c) >= 0) {
            str = "中";
        } else {
            str = "大";
        }
        return str;
    }

此时打印结果为

0.3:0.3 逻辑恢复正常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值