double相加,浮点数相加,都会出现不精确的情况!!!!!只能用String构造的BigDecimal的add。
float型不会出现乱加的情况,但因为只能有8位,所以会出现乱截取情况。
参见:http://www-128.ibm.com/developerworks/cn/java/j-jtp0114/index.html
这样解决:
// 用于精确计算,只有用String构造的BigDecimal可以实现精确计算
public static double add(double d1, double d2) {
Double dd1 = new Double(d1);
Double dd2 = new Double(d2);
String s1 = dd1.toString();
String s2 = dd2.toString();
BigDecimal bd1 = new BigDecimal(s1);
BigDecimal bd2 = new BigDecimal(s2);
return bd1.add(bd2).doubleValue();
}
public static double sub(double d1, double d2) {
Double dd1 = new Double(d1);
Double dd2 = new Double(d2);
String s1 = dd1.toString();
String s2 = dd2.toString();
BigDecimal bd1 = new BigDecimal(s1);
BigDecimal bd2 = new BigDecimal(s2);
return bd1.subtract(bd2).doubleValue();
}