0

我正在使用Symja

http://matheclipse.org/上,当我运行以下公式时:

round(100*17347*0.047)*0.01

我得到:815.31

运行以下 Java 代码时

ExprEvaluator exprEvaluator = new ExprEvaluator(false,100);
double d = exprEvaluator.evalf("round(100*17347*0.047)*0.01");
System.out.println(d);

我得到:815.3100000000001

我错过了什么?

4

1 回答 1

1

代码没有错。如果您只想获得数字的 2 精度,我的意思是打印,使用printf()代替println()

ExprEvaluator exprEvaluator = new ExprEvaluator(false,100);
double d = exprEvaluator.evalf("round(100*17347*0.047)*0.01");
System.out.printf("%.2f\n", d);

或者,如果你想要它的数值舍入值,你可以使用 Java 的DecimalFormat

double d = 815.3100000000001;
System.out.println(d);

DecimalFormat newFormat = new DecimalFormat("#.##");
double twoDecimal =  Double.valueOf(newFormat.format(d));
System.out.println(twoDecimal);

更重要的是,如果您对它的行为感到不舒服,请覆盖该evalf方法并Math.round(...)在其中使用。它可以实现您的愿望,而无需额外的 Java 方法。此外,您应该看一下evalf.

于 2018-08-07T14:00:44.207 回答