不好意思,再次向ticmy求助[也向各位大侠们求助,关于ScriptEngine得问题]

toss3000 2011-05-18 10:35:59
ticmy,你好,上次因为jexl在解决公式中含有小数的问题时,出了问题(http://topic.csdn.net/u/20110516/17/567b29dc-bf84-424f-95c7-a23bb4692152.html)我改成了js,这个问题可以解决了,但是又出现一个新的问题,如果公式中的数据复杂时,计算总是不正确,麻烦再帮我看看谢谢

import java.util.HashMap;
import java.util.Map;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TestSimpleExIf
{
public static void main(String[] args) throws ScriptException
{
Map<String, String> map = new HashMap();
map.put("x", "54.1");
map.put("y", "545563.45");
map.put("z", "75555.53");
map.put("d", "25555.64");


String exp = "if([[x]]>5,\"上升\"+([[z]]-[[d]]+[[y]]/2+[[y]]),\"下降\"+(-([[y]]-[[x]])))";

exp=exp.replaceAll("if\\((.*?),(.*?),(.*?)\\)","\\(\\($1\\)?$2:$3\\)");

exp = exp.replaceAll("\\[", "").replaceAll("\\]", "");

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine scriptEngine = manager.getEngineByName("js");

for (int k = 0; k < map.keySet().size(); k++)
{
Object key = map.keySet().toArray()[k];
Object value = map.get(key);
scriptEngine.put(key.toString(), value.toString());
}

Object result = scriptEngine.eval(exp);
System.out.println("结果:" + result );


}

}
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
toss3000 2011-05-19
  • 打赏
  • 举报
回复
ticmy,非常感谢!!!!!!
龙四 2011-05-18
  • 打赏
  • 举报
回复
主要注意这一句:scriptEngine.put(key.toString(), value);

value该是什么类型就是什么类型
龙四 2011-05-18
  • 打赏
  • 举报
回复
原因是你在Map中添加的是字符串,它按字符串连接来做了
public static void main(String[] args) throws ScriptException {
Map<String, Object> map = new HashMap();
map.put("x", 54.1);
map.put("y", 545563.45);
map.put("z", 75555.53);
map.put("d", 25555.64);


String exp = "if([[x]]>5,\"上升\"+([[z]]-[[d]]+[[y]]/2+[[y]]),\"下降\"+(-([[y]]-[[x]])))";

exp=exp.replaceAll("if\\((.*?),(.*?),(.*?)\\)","\\(\\($1\\)?$2:$3\\)");

exp = exp.replaceAll("\\[", "").replaceAll("\\]", "");
System.out.println(exp);
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine scriptEngine = manager.getEngineByName("js");

for (int k = 0; k < map.keySet().size(); k++)
{
Object key = map.keySet().toArray()[k];
Object value = map.get(key);
scriptEngine.put(key.toString(), value);
}

Object result = scriptEngine.eval(exp);
System.out.println("结果:" + result );
}

toss3000 2011-05-18
  • 打赏
  • 举报
回复
等待兄弟们的指点啊
toss3000 2011-05-18
  • 打赏
  • 举报
回复
自己顶一下千万别沉了

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧