3

很容易实现“计算器”来解析字符串(例如,2 ^ 3 / 2)并计算运算结果。但是,是否有图书馆已经能够做到这一点?

4

6 回答 6

4

dotMath库就是这样做的。

于 2010-02-11T18:05:10.930 回答
2

为了做到这一点,您将需要某种数学解析器。我之前使用过 DeepEddie 使用 RPN 的 C# Expression Parser,或者如果您使用的表达式的复杂性范围更有限,您也可以自己制作。

不要让它吓到你,它实际上很容易制作。

于 2010-02-11T18:06:33.907 回答
1

在您的应用程序中嵌入 Ironpython,然后您可以要求它评估任意复杂的字符串

我想他们甚至有同样东西的样本

于 2010-02-11T18:02:40.000 回答
0

I have used this :

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); 
                       }
                 }
              }";
  }
于 2010-02-11T18:38:38.800 回答
0

您也可以使用 JScript 库,尽管它已被弃用。不是说你应该,只是说你可以。

Microsoft.JScript.Eval.JScriptEvaluate

于 2010-02-11T18:30:50.570 回答
0

查看反向波兰表示法。它广泛用于现代计算器

于 2010-02-11T18:10:25.050 回答