簡體   English   中英

如何評估由字符串表示的數學表達式?

[英]How can I evaluate a math expression represented by a string?

實現“計算器”以解析字符串(例如2 ^ 3 / 2 )並計算運算結果很容易。 但是,是否已經有一個圖書館能夠做到這一點?

dotMath庫執行此操作。

為此,您將需要某種數學解析器。 我以前使用過DeepEddie的RPN進行的C#Expression Parser ,或者如果使用的表達式的復雜性范圍有限,也可以自己制作。

不要讓它嚇到你,它實際上很容易制造。

將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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM