很容易实现“计算器”来解析字符串(例如2 ^ 3 / 2
)并计算操作结果。但是,是否已有能够执行此操作的库?
答案 0 :(得分:4)
dotMath库可以做到这一点。
答案 1 :(得分:2)
为了做到这一点,你需要某种数学解析器。我之前使用过C# Expression Parser using RPN by DeepEddie,或者如果你使用的表达式的复杂性范围有限,你可以自己创建。{/ p>
不要让它吓到你,它实际上很容易制作。
答案 2 :(得分:1)
在您的应用中嵌入ironpython,然后您可以要求它评估任意复杂的字符串
我认为他们甚至有同样的样本
答案 3 :(得分:0)
结帐Reverse Polish notation。它广泛用于现代计算器
答案 4 :(得分:0)
您也可以使用JScript库,尽管它已被弃用。不是说你应该,只是你可以。
答案 5 :(得分:0)
我用过这个:
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);
}
}
}";
}