首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET中有字符串数学计算器吗?

.NET中有字符串数学计算器吗?
EN

Stack Overflow用户
提问于 2008-12-10 04:14:05
回答 14查看 78.5K关注 0票数 97

如果我有一个包含有效数学表达式的字符串,例如:

代码语言:javascript
复制
String s = "1 + 2 * 7";

.NET中有没有内置库/函数可以帮我解析和计算表达式并返回结果?在本例中为15。

EN

回答 14

Stack Overflow用户

发布于 2008-12-24 23:37:28

对于任何在Silverlight上使用C#进行开发的人来说,这里有一个我刚刚发现的非常巧妙的技巧,它允许通过调用Javascript引擎来计算表达式:

代码语言:javascript
复制
double result = (double) HtmlPage.Window.Eval("15 + 35");
票数 28
EN

Stack Overflow用户

发布于 2010-12-09 17:35:41

你看到http://ncalc.codeplex.com了吗?

它的可扩展性,快速(例如,有自己的缓存)使你能够通过处理EvaluateFunction/EvaluateParameter事件在运行时提供自定义函数和变量。它可以解析的示例表达式:

代码语言:javascript
复制
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加载新函数。

票数 27
EN

Stack Overflow用户

发布于 2010-02-04 08:59:18

实际上,有一种内置的方法--你可以使用XPath命名空间!尽管它要求您重新格式化字符串以使用XPath表示法进行确认。我曾经使用过这样的方法来处理简单的表达式:

代码语言:javascript
复制
    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);
    }
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/355062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档