如何修复 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
.
的实现
我正在使用 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
.