如何修复 Symja 中的精度?

How to fix precision in Symja?

我正在使用 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

我错过了什么?

代码没有错。如果你只想得到数字的 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.

的实现