[英]How can I evaluate a math expression represented by a string?
實現“計算器”以解析字符串(例如2 ^ 3 / 2
)並計算運算結果很容易。 但是,是否已經有一個圖書館能夠做到這一點?
dotMath庫執行此操作。
為此,您將需要某種數學解析器。 我以前使用過DeepEddie的RPN進行的C#Expression Parser ,或者如果使用的表達式的復雜性范圍有限,也可以自己制作。
不要讓它嚇到你,它實際上很容易制造。
將ironpython嵌入到您的應用中,然后您可以要求它評估任意復雜的字符串
我認為他們甚至有同樣的事情的樣本
查看波蘭語反向符號 。 在現代計算器中被廣泛使用
您也可以使用JScript庫(盡管已棄用)。 並不是說你應該,只是說你可以。
我用了這個:
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.