Domanda

E 'facile da implementare una "calcolatrice" per analizzare una stringa (ad esempio, 2 ^ 3 / 2) e calcolare il risultato delle operazioni. Ma, c'è una libreria già in grado di fare questo?

È stato utile?

Soluzione

Il dotMath biblioteca fa questo.

Altri suggerimenti

Si sta andando ad avere bisogno di un qualche tipo di matematica parser per farlo. Ho usato C # Parser Espressione usando RPN da DeepEddie prima, o si potrebbe fare il vostro proprio se la complessità delle espressioni che si utilizzano sono di portata più limitata.

Non lasciatevi spaventare, in realtà è abbastanza facile da fare.

IronPython incorporare nella vostra applicazione, si può quindi chiedere di valutare le stringhe arbitrariamente complesse

penso che hanno anche un campione della stessa cosa

Reverse Polish Notation . E 'ampiamente utilizzato in calcolatrici moderne

È inoltre possibile utilizzare la libreria JScript anche se la sua deprecato. Non dicendo che si dovrebbe, solo che si poteva.

Microsoft.JScript.Eval.JScriptEvaluate

Ho usato questo:

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); 
                       }
                 }
              }";
  }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top