我正在使用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
我想念什么?
答案 0 :(得分: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
的实现。