大学的毕业设计涉及工作量计算,需要维护公式计算,当时用的是[数据结构]第一章讲的用堆栈的方式实现表达式计算。
后来做程序遇到表达式计算的时候会将计算公式放到数据库中去执行计算返回结果 。(网上大多数也是这个做法),另外还有一种是用反射在运行时编译一个类(是个解决办法,但是那个做法个人感觉不是很好)
当然Web前台用Javascript 也是比较容易的实现:
var expression="10+10*5";
var a=eval(expression);
最近项目中又用到计算公式,总觉得麻烦,网络上浏览了一圈看到用反射的,用堆栈的, 都不是很爽, 后来从张老虎(老虎哥呀^_^)那里得到一个比较帅的做法 (C# ):
public string Calculate(string expression)
{
DataTable table = new DataTable();
table.Columns.Add("expression", string.Empty.GetType(), expression);
DataRow row = table.NewRow();
table.Rows.Add(row); //.net的row可以自动计算
return double.Parse((string)row["expression"]).ToString();
}