可以很容易地实现“计算器”解析一个字符串(例如,2 ^ 3 / 2)和计算操作的结果。但是,有一个库已可做到这一点?

有帮助吗?

解决方案

dotMath 库这一点。

其他提示

您将需要某种数学解析器,才能做到这一点。我用用RPN C#表达式解析器通过DeepEddie 之前,或者你可以让你自己,如果你使用表达式的复杂性是比较有限的范围之内。

不要让它吓唬你,它实际上是相当容易。

在您的应用程序

嵌入IronPython的,然后你可以问它来评估任意复杂的字符串

我认为他们甚至有同样的事情的样品

查核逆波兰表示法。它广泛应用于现代计算器

您也可以使用JScript的图书馆虽然其弃用。不是说你要,只要你能。

Microsoft.JScript.Eval.JScriptEvaluate

我已经使用这样的:

using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.JScript;


  public class JScriptEvaluator
  {
        public   int EvalToInteger(string statement)
        {
              string s = EvalToString(statement);
              return int.Parse(s.ToString());
        }

        public   double EvalToDouble(string statement)
        {
              string s = EvalToString(statement);
              return double.Parse(s);
        }

        public   string EvalToString(string statement)
        {
            object o = "-1";
            try
            {
             o=  EvalToObject(statement);
            }
            catch { o = "-1"; }
              return o.ToString();
        }

        public   object EvalToObject(string statement)
        {
              return _evaluatorType.InvokeMember(
                                "Eval",
                                BindingFlags.InvokeMethod,
                                null,
                                _evaluator,
                                new object[] { statement }
                          );
        }

        public JScriptEvaluator()
        {
              CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider();

              CompilerParameters parameters;
              parameters = new CompilerParameters();
              parameters.GenerateInMemory = true;

              CompilerResults results;
              results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);

              Assembly assembly = results.CompiledAssembly;
              _evaluatorType = assembly.GetType("Evaluator.Evaluator");

              _evaluator = Activator.CreateInstance(_evaluatorType);
        }

        private   object _evaluator = null;
        private   Type _evaluatorType = null;
        private   readonly string _jscriptSource =

              @"package Evaluator
              {
                 class Evaluator
                 {
                       public function Eval(expr : String) : String 
                       { 
                          return eval(expr); 
                       }
                 }
              }";
  }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top