快速业务通道

用BeanShell实现公式管理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
本就是BeanShell脚本。这样做的好处是:无需对表达式字符窜的解析,用BeanShell解释器来完成对脚本的求值。下面的代码简洁的完成了对表达式的求值:

清单2.

public double caculateByFormula(Formula formula, Hashtable parameters) {   double result=0.0;   try   {   Interpreter i = new Interpreter();   // 实例化一个BeanShell解释器    i.eval("import parse.*;");   //引用公式管理系统   Vector para= formula.getParameters();   //获取公式中包含的参数列表   Iterator it= para.iterator();   //设置参数值   while (it.hasNext()){    String[] dec= (String[])it.next();    String declare= dec[1]+ " "+ dec[0];    i.eval(declare);    String value= ((Double)parameters.get(dec[0])).toString();    if (value != null){    String assign_value= dec[0]+ "="+ value;    i.eval(assign_value);    }else{    System.out.println("caculateByFormula():"+ dec[0]+    "参数名不符或改参数不存在");     System.exit(1);    }   }   //参数设置成功,根据公式计算脚本进行计算,仅用了一行代码就完成了求值过程,   BeanShell值得你去了解    i.eval(formula.getScript());   Double rst= (Double)i.get("result");   result= rst.doubleValue();   }catch(Exception e){   System.out.println("caculateByFormula():"+ e.getMessage());   }   return result; }

用BeanShell实现公式管理(4)

时间:2011-06-22 IBM / 杨铁军

也许你曾经用解析字符窜的方法做过类似的编程工作,当你看到这里仅用一行代码就完成了对表达式的求值,是不是很惊讶?首先,实例化一个BeanShell解释器,然后将要使用的系统包import 进来,Interpreter.eval()方法就是对括号内的脚本求值或者说是解释执行脚本。然后,将formula的参数取出来,用 BeanShell脚本方式声明这些参数,再将parameters中参数对应的值再次用BeanShell脚本的方式赋值给对应的变量。请注意,如果这时候传入的参数名不正确或者是参数名对应的参数类型不符,就会抛出系统异常。如果参数设置成功,则调用formula的公式计算脚本。仅用一行代码,BeanShell完成了大部分的工作:i.eval(formula.getScript())。最后,从解释器中取得计算结果,该结果存放在 result变量中(可以查看清单1.中公式计算脚本)。现在是不是觉得BeanShell是一个好帮手?只要使用恰当,BeanShell将帮助你大大简化你的编程工作,这是一件非常快乐的事情。

另外,装载formula使用了JDOM技术,它从公式库中找到对应的公式,然后将该公式的参数列表以及计算脚本读出来组装成一个公式对象。见如下代码:

清单3.

public Formula loadFormula(String formulaID) {   Vector paras= new Vector();      try{   SAXBuilder builder= new SAXBuilder();   Document doc= builder.build(prefix+ "Formulas.xml");   //prefix是一个字符窜,用来指定公式库实际所在的位置   Element root= doc.getRootElement();   List formulas= root.getChildren("formula");   Iterator it= formulas.iterator();   Element formula= null;   while( it.hasNext()){    formula= (Element)it.next();    if(formula.getAttributeValue("id").equals(formulaID)){    break;    }   }   //获取参数列表   List parameters= formula.getChild(

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号