JAVA计算器,小数相乘的错误~是double类型的问题?我怎么改才行?3*1.3都出错等于3.9000000000000004// public double calculator(){// switch(c){// case 0:f=g;break;// case 1:f=b+g;break;// case 2:f=b-g;break;// case 3:f=b*g;break;//
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/26 12:40:16
JAVA计算器,小数相乘的错误~是double类型的问题?我怎么改才行?3*1.3都出错等于3.9000000000000004// public double calculator(){// switch(c){// case 0:f=g;break;// case 1:f=b+g;break;// case 2:f=b-g;break;// case 3:f=b*g;break;//
JAVA计算器,小数相乘的错误~是double类型的问题?我怎么改才行?3*1.3都出错等于3.9000000000000004
// public double calculator(){
// switch(c){
// case 0:f=g;break;
// case 1:f=b+g;break;
// case 2:f=b-g;break;
// case 3:f=b*g;break;
// case 4:f=b/g;break;
// }
//
// b=f;
// c=0;
//
// return f;
// }
//
// 减
fuhao[1].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if (str = "") {
if (vi == fuhao[0] || vi == fuhao[1] || vi == fuhao[2]
|| vi == fuhao[3]) {
c = 2;
}
else {
g = Double.parseDouble(str);
calculator();
str = "" + f;
et.setText(str);
c = 2;
flag = 1;
vi = v;
}
}
}
});
JAVA计算器,小数相乘的错误~是double类型的问题?我怎么改才行?3*1.3都出错等于3.9000000000000004// public double calculator(){// switch(c){// case 0:f=g;break;// case 1:f=b+g;break;// case 2:f=b-g;break;// case 3:f=b*g;break;//
是Double导致的,运算最好使用BigDecimal来计算
给你个简单加减乘除的例子
public static BigDecimal getBigDecimal(double num){
return new BigDecimal(num);
}
public static double add(double num1,double num2){
BigDecimal big1 = getBigDecimal(num1);
BigDecimal big2 = getBigDecimal(num2);
return big1.add(big2).doubleValue();
}
public static double subtract(double num1,double num2){
BigDecimal big1 = getBigDecimal(num1);
BigDecimal big2 = getBigDecimal(num2);
return big1.subtract(big2).doubleValue();
}
public static double multiply(double num1,double num2){
BigDecimal big1 = getBigDecimal(num1);
BigDecimal big2 = getBigDecimal(num2);
return big1.multiply(big2).doubleValue();
}
public static double divide(double num1,double num2){
BigDecimal big1 = getBigDecimal(num1);
BigDecimal big2 = getBigDecimal(num2);
return big1.divide(big2,1,BigDecimal.ROUND_HALF_UP).doubleValue();
}