我使用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”。
发布于 2019-03-13 22:48:57
根据Jeval的Javadoc for the evaluate(String expression) method for Jeval 0.9.4,它说:
“计算的结果。表达式。数字被视为双精度,因此结果数字将至少包含一个小数位。”
使用doubles时,您无法避免精度损失。参见this。浮点数有这个限制。例如,您可以在生成11.399999999999的5.6 + 5.8这样的简单表达式中看到它。
https://stackoverflow.com/questions/55140288
复制相似问题