文字列で表される数学式を評価するにはどうすればよいですか?
-
20-09-2019 - |
質問
文字列を解析するために「計算機」を実装するのは簡単です(例: 2 ^ 3 / 2
)および操作の結果を計算します。しかし、すでにこれを行うことができるライブラリはありますか?
解決
ドットマス 図書館はこれを行います。
他のヒント
それを行うには、ある種の数学パーサーが必要になります。私は使用しました deepeddieによるRPNを使用したC#表現パーサー 以前は、使用する表現の複雑さがより限られた範囲である場合、自分で作ることができます。
それがあなたを怖がらせないでください、それは実際に作るのは非常に簡単です。
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