日期:2014-05-19  浏览次数:20869 次

关于用户自定义计算公式如何分析??
假设:
a   b   c   d四个数
由用户在文本框中输入公式,并计算出结果。
涉及到的计算有+   -   *   /   (),
例:
文本框内的内容如下(a*b+c)*c+(d-c)*b+5

要如何对公式进行分析,并识别出不正确的公式,
比如输入了非法的字符,或某个数除以了0等等。

------解决方案--------------------
把它做为一个Sql语句去执行就可以了:)
------解决方案--------------------
这样:
using System;
using System.Xml;
using System.Xml.XPath;
using System.Text;

namespace Wuyh
{
/// <summary>
/// 简单转换类
/// 计算字符表达式
/// </summary>
public class Converts
{
/// <summary>
/// 计算字串表达式的值
/// </summary>
/// <param name= "p_str "> 字符表达式如:1+2+3 </param>
/// <returns> </returns>
private Converts()
{
}

public static double Evaluate(string p_str)
{
double rtnValue=0;
XmlDocument doc = new XmlDocument();
XPathNavigator nav=doc.CreateNavigator();
try
{
rtnValue=Convert.ToDouble(nav.Evaluate(p_str));
}
catch
{
rtnValue=0;
}
return rtnValue;
}
}
}
------解决方案--------------------
/// <summary>
/// 计算一个表达式的结果
/// </summary>
/// <param name= "expression "> 表达式 </param>
/// <returns> </returns>
public static object Eval(string expression)
{
System.Data.DataTable table = new System.Data.DataTable();
System.Data.DataColumn Col = new System.Data.DataColumn( "col1 ", typeof(string), expression);
table.Columns.Add(Col);

table.Rows.Add(new object[] { " " });
return table.Rows[0][0];
}
------解决方案--------------------
查查递归向下的解析器的实现机制,会有帮助