栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

BigDecimal常用两个注意要点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BigDecimal常用两个注意要点

  1. 实例化注意的地方
    阿里巴巴Java开发手册泰山版描述有如下描述

    为什么呢,举个例子
    @Test
    public void equals3(){
        double a = 1.22222d;
        BigDecimal bigDecimal1 = new BigDecimal(a);
        BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(a));
    
        System.out.println("构造方法BigDecimal(double)方式把double值转换为BigDecimal对象:"+bigDecimal1);
    
        System.out.println("构造方法BigDecimal(String)方式把double值转换为BigDecimal对象:"+bigDecimal2);
    
    }
    

得到的结果是

可见,使用BigDecimal(double)存在精度损失的风险;
因此,应该实例化先将变量转换为String类型,再通过构造方法转换为double

  1. 两个BIgDecimal类型的数据比较
    !!!需要注意的地方,将BigDecimal类型转换为String类型,再使用equals()比较存在的问题
    • 当比较两个数 2.3 和 2.30 时,得出的结果时不相等的;也即,比较0和0.00时,得到的结果也是不相等的;所以,不能转换为String类型进行比较

举个例子

 //转换为String比较
    @Test
    public void equals2(){
        BigDecimal bigDecimal1 = new BigDecimal(2.3);
        BigDecimal bigDecimal2 = new BigDecimal(2.4);
        BigDecimal bigDecimal3 = new BigDecimal(2.30);

        System.out.println("bigDecimal类型使用compareTo()比较......"+(bigDecimal1.compareTo(bigDecimal2) == 0));
        System.out.println("bigDecimal类型使用compareTo()比较......"+(bigDecimal1.compareTo(bigDecimal3) == 0));
        
        System.out.println("=========2.3 和 2.30 比较===========");

        String b1 = "2.3";
        String b2 = "2.30";
        BigDecimal b11 = new BigDecimal(b1);
        BigDecimal b21 = new BigDecimal(b2);
        System.out.println("bigDecimal类型转换为equals比较......"+(String.valueOf(b11).equals(b21)));
    }

得到的结果是

可见,应该使用compareTo()比较

A.compareTo(B) == 0 //表示 A和B相等
A.compareTo(B) == 1 //表示 A大于B
A.compareTo(B) == -1 //表示 A小于B

以上写法也有需要注意的地方,A和B需要分别校验是否为空,否则会报空指针异常;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号