C#动态计算字符串中的表达式
最近遇到一个需要计算字符串中表达式的需求,需要从字符串公式中动态计算结果。
类似下面这样
1 string expression = "Age * 0.2 + Height * 0.1 + log4";
使用DataTable.Compute函数
一开始找的是下面这种方法,但是不能计算对数
1 using System.Data; 2 3 DataTable dt = new DataTable(); 4 var result = dt.Compute(expression,"");
执行VBS脚本计算
后面又找了一种方法,利用VBS脚本里的计算功能,这种方法基本能满足需求了,复杂计算也可以。
方法如下
需要引用COM组件Microsoft Script Control 1.0
1 MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl(); 2 sc.Language = "VBScript"; 3 object result = sc.Eval("18 * 0.2 + 170 * 0.1"); 4 Console.WriteLine(result.ToString());
后面发现上面这种方式也不能计算对数,只能将表达式拆分 ,
未完
参考资料
https://stackoverflow.com/questions/333737/evaluating-string-342-yield-int-18
https://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net

浙公网安备 33010602011771号