日期:2014-05-19  浏览次数:20867 次

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