项目运行中报错如下:
看代码如下,刚开始没发现问题
private String getRate(BigDecimal a,BigDecimal b) {
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMaximumFractionDigits(2);
if(a.equals(BigDecimal.ZERO)){
return "--";
}else{
BigDecimal divide = a.subtract(b).divide(a, 4, BigDecimal.ROUND_CEILING);
return percent.format(divide.doubleValue());
}
}
后来查文档发现,BigDecimal用equals时会进行两个判断,先判断精度是否相同,如果不相同直接返回false,经度相同的情况下再判断值是否相同。在需要判断BigDecimal是否为0时需要用compareto()方法
改正后的代码如下:
private String getRate(BigDecimal a,BigDecimal b) {
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMaximumFractionDigits(2);
if(a.compareTo(BigDecimal.ZERO)==0){
return "--";
}else{
BigDecimal divide = a.subtract(b).divide(a, 4, BigDecimal.ROUND_CEILING);
return percent.format(divide.doubleValue());
}
}