JAVA怎么解决double精度问题。比如1.2*3=3.599...996这种。

1.2*3=3.5999…996
1.3*3=3.9000…004
这种蛋疼的结果怎么解决?

public static double add(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.add(b2).doubleValue();
}

public static double sub(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.subtract(b2).doubleValue();
}

public static double mul(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.multiply(b2).doubleValue();
}

public static double div(double d1,double d2){
return div(d1,d2,DEF_DIV_SCALE);

}

public static double div(double d1,double d2,int scale){
//scale 是小数点后要保留的位数

if(scale<0){
throw new IllegalArgumentException("精度不能小于零");
}
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
用的时候调用这几个方法。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-10
推荐 DecimalFormat
实例:
private String get(){
DecimalFormat df=new DecimalFormat("0.00");
double a=1.0;
return df.format(a)+"";
}本回答被网友采纳
第2个回答  2014-01-22
整数使用 BigInteger,浮点数使用 BigDecimal
第3个回答  2014-01-22
使用java提供的BigDecimal
第4个回答  2014-01-22
使用BigDecimal类
相似回答