关于用户自定义计算公式如何分析??
假设:
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];
}
------解决方案--------------------查查递归向下的解析器的实现机制,会有帮助