很容易实现“计算器”来解析字符串(例如,2 ^ 3 / 2
)并计算运算结果。但是,是否有图书馆已经能够做到这一点?
问问题
2222 次
6 回答
4
dotMath库就是这样做的。
于 2010-02-11T18:05:10.930 回答
2
为了做到这一点,您将需要某种数学解析器。我之前使用过 DeepEddie 使用 RPN 的 C# Expression Parser,或者如果您使用的表达式的复杂性范围更有限,您也可以自己制作。
不要让它吓到你,它实际上很容易制作。
于 2010-02-11T18:06:33.907 回答
1
在您的应用程序中嵌入 Ironpython,然后您可以要求它评估任意复杂的字符串
我想他们甚至有同样东西的样本
于 2010-02-11T18:02:40.000 回答
0
I have used this :
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);
}
}
}";
}
于 2010-02-11T18:38:38.800 回答
0
您也可以使用 JScript 库,尽管它已被弃用。不是说你应该,只是说你可以。
于 2010-02-11T18:30:50.570 回答
0
查看反向波兰表示法。它广泛用于现代计算器
于 2010-02-11T18:10:25.050 回答