我将jeval用于某些数据计算任务,但发现准确性下降。 有什么方法可以避免在使用jeval时造成精度损失? 我想得到像BigDecimal一样的准确结果。
public class EvalTest {
private static Evaluator eva = new Evaluator();
public static void main(String[] args) {
try {
String formula = "780.0000000-259.9999998";
String res = eva.evaluate(formula);
BigDecimal a = BigDecimal.valueOf(780.0000000);
BigDecimal b = BigDecimal.valueOf(259.9999998);
BigDecimal c = a.subtract(b);
System.out.println("a");
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果使用jeval,则公式“ 780.0000000-259.9999998”的结果将为“ 520.0000001999999”,但是如果使用BigDecimal,则可以获得的精度结果为“ 520.0000002”。
答案 0 :(得分:1)
根据Jeval的Javadoc的Jeval 0.9.4的evaluate(String expression)
方法,它说:
“求值表达式的结果。数字被视为 加倍,因此结果数字将至少包含一个小数 的地方。”
使用double不能避免精度损失。参见this。
浮点数具有此限制。例如,您可以在5.6 + 5.8
之类的简单表达式中看到它,其结果为11.399999999999
。