彻底解决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());
上一篇: 深入理解Spring MVC的数据转换