如题,org.apache.commons.jexl2.JexlEngine; 作用是 计算 字符串计算表达式的。小数据用的好好的,但是当表达式中的数据值很大时候,就出问题了,直接上代码吧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 (根本不知道怎么来的)请熟悉的朋友告诉下吧,急。分不多,请多多包含~!

解决方案 »

  1.   

    看了下源码,JEXL将"245687348.3"当成float来处理,将其转换成Number的时候,使用了Float.valueOf("245687348.3"),于是就出现了上面一幕可以在245687348.3后面加上d,让JEXL认为其是一个Double,double比float精度高,或者后面加b,让其认为是一个BigDecimal
      

  2.   

    厉害呀。ticmy师傅:唉,JEXL 开发的时候就不能想想 大数据值 怎么办? 不可理解,而且亿也不属于很大的数据值呀。
    叫我怎么把b加入到字符串表达式哦。头疼。
    字符串表达式 运算还有其他方法吗?
      

  3.   

    要是数值有运算就不会出现这样了吧,你就一个数,JEXL只是将其转换成Number类型,确切的说是Float类型