金额转换为分时精度丢失所致,BigDecimal在构建是必须用String类型才能不丢失精度
我在转换金额的时候用的是这种:
BigDecimal fee1 = new BigDecimal(2125.02);
BigDecimal totalFee1=fee1.multiply(new BigDecimal(100));
System.out.println(totalFee1.intValue());
结果发现精度丢失,输出:212501
通过实验发现如果数值中有小数,则必须用字符串构建,或用Double构建但最后要先转换成Double 再转换成int,否则会丢失精度,如下所示:
BigDecimal fee=new BigDecimal("2125.02");
BigDecimal totalFee=fee.multiply(new BigDecimal(100));
System.out.println(totalFee.intValue());
输出:212502
BigDecimal fee2 = new BigDecimal(2125.02);
BigDecimal totalFee2=fee2.multiply(new BigDecimal(100));
Double totfee=totalFee2.doubleValue();
System.out.println(totfee.intValue());
输出:212502
BigDecimal fee1 = new BigDecimal(2125.02);
BigDecimal totalFee1=fee1.multiply(new BigDecimal(100));
System.out.println(totalFee1.intValue());
输出:212501