欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

彻底解决BigDecimal出现很多位小数问题

程序员文章站 2024-03-02 18:57:22
...

1、BigDecimal对象不要构造Double类型小数
比如:

BigDecimal num5 = new BigDecimal(2.225667);
//会损失经度,打印结果:2.225667000000000061987748267711140215396881103515625
System.out.println(num5);
应该改为写法:
BigDecimal num5 = new BigDecimal("2.225667");
或者不是double类型的也可以,例如:
BigDecimal num2 = new BigDecimal(2);//这种写法是可以的

2、多个BigDecimal相加减乘除的结果可能出现类似:
100438.137000000000000002
100438.1370000000
这样的结果。
观察过程,比如代码:

BigDecimal num1 = new BigDecimal("54432.30000122");
    	BigDecimal num2 = new BigDecimal("5.3100440");
    	BigDecimal result = num1.add(num2);
    	//结果为54437.61004522
    	System.out.println(result);
    	//结果为54437.6100
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR));
    	//结果为54437.61
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR).stripTrailingZeros());
    	//假如位数过多有时间会变为科学计数法,加 toPlainString()则控制不会出现科学计数法
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR).stripTrailingZeros().toPlainString());
相关标签: 项目开发 java