首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么jexl calc算法错误

为什么jexl calc算法错误
EN

Stack Overflow用户
提问于 2011-11-27 14:36:19
回答 2查看 3K关注 0票数 3

我使用JEXL库来计算具有不同参数的数学表达式(例如y=2x+a^2-4*a*x where (x=1&a=3),(x=5&a=-15)等)。它在简单的表达式上效果很好,但当我开始使用更难的表达式时,它就不起作用了。下面是运行良好的代码:

代码语言:javascript
复制
JexlEngine jexl = new JexlEngine();
Expression func = jexl.createExpression("x1+x2");
MapContext mc = new MapContext();
mc.set("x1", 2);
mc.set("x2", 1);
System.out.println(func.evaluate(mc)); // prints "3" - GOOD ANSWER!

但是这个打印出了错误的答案:

代码语言:javascript
复制
JexlEngine jexl = new JexlEngine();
Expression func = jexl.createExpression("(x1-2)^4+(x1-2*x2)^2");
MapContext mc = new MapContext();
mc.set("x1", 2);
mc.set("x2", 1);
System.out.println(func.evaluate(mc)); // prints "6" - WRONG ANSWER!

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-27 16:58:26

^是按位异或的,所以6是预期的答案。详情请参见JEXL syntax

票数 3
EN

Stack Overflow用户

发布于 2013-05-20 18:02:20

你可以这样做:

代码语言:javascript
复制
   Map<String, Object> functions=new HashMap<String, Object>(); 
   // creating namespace for function eg. 'math' will be treated as Math.class
   functions.put( "math",Math.class);
   JexlEngine jexl = new JexlEngine();
   //setting custom functions
   jexl.setFunctions( functions);
   // in expression 'pow' is a function name from 'math' wich is Math.class
   Expression expression = jexl.createExpression( "math:pow(2,3)" );   
   expression.evaluate(new MapContext());
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8284059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档