JexlEngine 计算表达式 解析大数据值的问题
如题,org.apache.commons.jexl2.JexlEngine; 作用是 计算 字符串计算表达式的。
小数据用的好好的,但是当表达式中的数据值很大时候,就出问题了,
直接上代码吧
Java code
public static void main(String[] args) {
JexlEngine je = new JexlEngine();
// Create an expression object
Expression e = je.createExpression("245687348.3");
Number result = (Number) e.evaluate(null);
//System.out.println(result);
System.out.println(String.format("%.4f", result));
}
当前表达式为 : 245687348.3 (就一个数字,测试用的)
打印的结果是 : 245687344.0000 (根本不知道怎么来的)
请熟悉的朋友告诉下吧,急。分不多,请多多包含~!
------解决方案--------------------
看了下源码,JEXL将"245687348.3"当成float来处理,将其转换成Number的时候,使用了Float.valueOf("245687348.3"),于是就出现了上面一幕
可以在245687348.3后面加上d,让JEXL认为其是一个Double,double比float精度高,或者后面加b,让其认为是一个BigDecimal