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;
}
}
}
});
// 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;
}
}
}
});
是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中
给你个简单加减乘除的例子
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中
JAVA计算器,小数相乘的错误~是double类型的问题?我怎么改才行?3*1.3都出错等于3.900000000000
Java 中float 、double的精度问题:float 、double取值范围是怎么样计算出来的?
double类型的数据怎么指定小数后的位数?如题 谢谢了
Java里怎么将double保留三位小数,不足的用空格填充(不出现小数点)?
C#中 一个 double类型的值 我需要 取小数点前面的整数 也需要取小数点后面的小数 都需要取
程序出错怎么找错误的地方?
Java:对double值进行四舍五入,保留两位小数的几种方法
Java编写计算器的流程图
两个小数相乘的积是两位小数 四舍五入后是39.1 这两个小数都只有一位小数 个位数
vb中数据类型 两个double类型的数据相除返回结果如果是很大的小数总是溢出怎么办?
arcgis 属性表里面面积字段保留4位小数,用的是Double类型,字段精度应该填多少?
JAVA中常见的数据类型有double ,int ,float 有food 这种类型吗,我看到一个语句不太明白