private String getStr(BigDecimal a) {
String str;
BigDecimal b = new BigDecimal(0.3);
BigDecimal c = new BigDecimal(-0.8);
if (a.compareTo(b) > 0) {
str = "小";
} else if (a.compareTo(b) <= 0 && a.compareTo(c) >= 0) {
str = "中";
} else {
str = "大";
}
return str;
}
a=0.3时应返回 中 ,但是却返回了 小,输出a.compareTo(b)结果发现是1
此时再次输出a和b的值
private String getStr(BigDecimal a) {
String str;
BigDecimal b = new BigDecimal(0.3);
BigDecimal c = new BigDecimal(-0.8);
System.out.println(a+":"+b);
if (a.compareTo(b) > 0) {
str = "小";
} else if (a.compareTo(b) <= 0 && a.compareTo(c) >= 0) {
str = "中";
} else {
str = "大";
}
return str;
}
打印结果为 0.3:0.299999999999999988897769753748434595763683319091796875
new BigDecimal(0.3) 比较时丢失精度,所以需要修改为
private String getStr(BigDecimal a) {
String str;
BigDecimal b = new BigDecimal("0.3");
BigDecimal c = new BigDecimal("-0.8");
System.out.println(a+":"+b);
if (a.compareTo(b) > 0) {
str = "小";
} else if (a.compareTo(b) <= 0 && a.compareTo(c) >= 0) {
str = "中";
} else {
str = "大";
}
return str;
}
此时打印结果为
0.3:0.3 逻辑恢复正常