如果我有一个包含有效数学表达式的字符串,例如:
String s = "1 + 2 * 7";
.NET中有没有内置库/函数可以帮我解析和计算表达式并返回结果?在本例中为15。
发布于 2008-12-24 23:37:28
对于任何在Silverlight上使用C#进行开发的人来说,这里有一个我刚刚发现的非常巧妙的技巧,它允许通过调用Javascript引擎来计算表达式:
double result = (double) HtmlPage.Window.Eval("15 + 35");
发布于 2010-12-09 17:35:41
你看到http://ncalc.codeplex.com了吗?
它的可扩展性,快速(例如,有自己的缓存)使你能够通过处理EvaluateFunction/EvaluateParameter事件在运行时提供自定义函数和变量。它可以解析的示例表达式:
Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)");
e.Parameters["Pi2"] = new Expression("Pi * Pi");
e.Parameters["X"] = 10;
e.EvaluateParameter += delegate(string name, ParameterArgs args)
{
if (name == "Pi")
args.Result = 3.14;
};
Debug.Assert(117.07 == e.Evaluate());
它还在本地处理unicode &许多数据类型。如果你想改变语法,它会附带一个鹿角文件。还有一个fork,它支持MEF加载新函数。
发布于 2010-02-04 08:59:18
实际上,有一种内置的方法--你可以使用XPath命名空间!尽管它要求您重新格式化字符串以使用XPath表示法进行确认。我曾经使用过这样的方法来处理简单的表达式:
public static double Evaluate(string expression)
{
var xsltExpression =
string.Format("number({0})",
new Regex(@"([\+\-\*])").Replace(expression, " ${1} ")
.Replace("/", " div ")
.Replace("%", " mod "));
return (double)new XPathDocument
(new StringReader("<r/>"))
.CreateNavigator()
.Evaluate(xsltExpression);
}
https://stackoverflow.com/questions/355062
复制相似问题