作业帮 > 综合 > 作业

JAVA计算器,小数相乘的错误~是double类型的问题?我怎么改才行?3*1.3都出错等于3.900000000000

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/06/16 00:19:18
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.900000000000
是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();
}
再问: 那我想要他出现那么长的精度怎么办?用 BigDecimal怎么弄?我我把字符串转换成BigDecimal,并且在EditText上面输出??
再答: 精度也是可以控制的,下面的len就是你结果小数点后输出的位数 public static double divide(double num1,double num2,int len){ len = 3; BigDecimal big1 = getBigDecimal(num1); BigDecimal big2 = getBigDecimal(num2); return big1.divide(big2,len,BigDecimal.ROUND_HALF_UP).doubleValue(); } 至于你说的在EditText输出的问题,你可以把BigDecimal 值转换为String再显示在EditText中