关于BigDecimal转String的准确性问题

case 1:

String str=new BigDecimal(123.9).toString()

输出str:123.900000000000005684341886080801486968994140625

解决方案:

String str=BigDecimal.valueOf(123.9).toString()

 

 

case2:

//数据库中该字段类型为decimal(20, 2),值为200.10
BigDecimal num = testMapper.query();
//值为200.1
String str = testDTO.getNum();
//比较BigDecimal与String:
if (num != null) {
    boolean ifEquals = num.toString.equals(str);
}            

结果为:false

解决方案:比较两个BigDecimal要通过BigDecimal的compareTo()方法。

 

 

case3:

不要直接比较double、float类型的值,因为他们可能是不准确的。建议转成BigDecimal进行比较,String也不建议,因为如3.14 != 3.140。另外,数字后f、d表示float与double,也就意味着他们的精度是不同的:

    public static void main(String[] args) {
        double a = 3.14f;
        double b = 3.14;
        System.out.println(a == 3.14);
        System.out.println(b == 3.14);
        System.out.println(a);
        System.out.println(b);
    }

 

posted @ 2020-10-21 18:04  机械公敌  阅读(1550)  评论(0编辑  收藏  举报