下载地址
我自己做的一个计算库,专门用来做公式的计算如
a*b*3.2-2^ 这是简单的,还更复杂的通用函数和自定定义函数
a^2*sin(c-5)*max(a,b,c,d)-power(c,2)+sqrt(c)+abs(d)
等等一系列的函数,每个函数对应一处理这个函数的方法,不可能一个个去检查方法名,然后用 if ..else if ..else if 这么复杂
我就把每个函数的处理方法名写为f_函数名,如sin的对应的处理方法为f_sin 参数是一个ArrayList,返回一个double类型的数,这样进行处理时,只要根据函数名就可以用反射的机制来调用相关的处理函数,
这个计算库经过8个月使用和调试,已在我们公司广泛应用
示例
using System;
using System.Collections;
using hammergo.caculator;
public calss test
{
public void Main()
{
string express="a*b-6.23+a^2*sin(pi()/2)+max(1,2,3,4)";
CalcFunction calcF = CalcFunction();
MyList list=new MyList(10);
list.add("a",2);
list.add("b",2.2);
double result= calcF.compute(express,list);
//注ArrayList pList = calcF.getVaribles(s);是将s表达的的所有变量分析出来放入ArrayList中
//变量支持如a2 ac2 等,还支持 adk.w 也就是中间带点的变量
//有总是可以联系,我可以改进 ,实现的函数在xml文件中有
//如果没有变量的话,直接高用compute的重载版本 calcF.compute(express);
}
}