这个和你代码是无关系的,你用的double 是java中的基本数据类型,他们用来做科学计算的话,是不精确的
比如很简单的代码 double i=1.006;
double j=1;
System.out.println(i+j); 运行结果为:2.0060000000000002 而并不是2.006,
。如果要进行精确计算的话需要使用BigDecimal
BigDecimal a = new BigDecimal(i);
BigDecimal b = new BigDecimal(j);
相应的加减乘除方法
switch (this.operator) {
case '+':
this.result = a.add(b).toString();
break;
case '-':
this.result = a.subtract(b).toString();
break;
case '*':
this.result = a.multiply(b).toString();
break;
case '/':
if (b.doubleValue() == 0) {
throw new RuntimeException("被除数不能为0");
}
this.result = a.divide(b, 10, BigDecimal.ROUND_HALF_UP).toString();
break;
default:
throw new RuntimeException("运算符号错误:" + this.operator);
}
|