如何评估一个字符串表示的数学表达式?
-
20-09-2019 - |
题
可以很容易地实现“计算器”解析一个字符串(例如,2 ^ 3 / 2
)和计算操作的结果。但是,有一个库已可做到这一点?
解决方案
在 dotMath 库这一点。
其他提示
您将需要某种数学解析器,才能做到这一点。我用用RPN C#表达式解析器通过DeepEddie 之前,或者你可以让你自己,如果你使用表达式的复杂性是比较有限的范围之内。
不要让它吓唬你,它实际上是相当容易。
在您的应用程序
嵌入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);
}
}
}";
}
不隶属于 StackOverflow