关于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);
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM