C# 使用数学运算符计算字符串

C# 使用数学运算符计算字符串,c#,string,parsing,math,evaluation,C#,String,Parsing,Math,Evaluation,有没有一种简单的方法来计算字符串,比如 “(4+8)*2” 这样你就能得到24的int值了 或者需要做大量的工作来完成这项工作…?您需要一个数学表达式解析器来完成这项工作。以下是关于这方面的资源: (商业) (开源) 使用Ncalc: Expression e = new Expression("(4+8)*2"); Debug.Assert(24 == e.Evaluate()); 另外,这个问题以前被问过,有一些有趣的答案,包括Ncalc:其他人添加了这个,然后被删除了。我

有没有一种简单的方法来计算字符串,比如
“(4+8)*2”
这样你就能得到24的int值了


或者需要做大量的工作来完成这项工作…?

您需要一个数学表达式解析器来完成这项工作。以下是关于这方面的资源:

  • (商业)
  • (开源)
使用Ncalc:

Expression e = new Expression("(4+8)*2");
Debug.Assert(24 == e.Evaluate());   


另外,这个问题以前被问过,有一些有趣的答案,包括Ncalc:

其他人添加了这个,然后被删除了。我觉得这很酷,因为不需要第三方库

class Program { static void Main(string[] args) { Console.WriteLine(Evaluate("(4+8)*2")); Console.ReadKey(); } public static double Evaluate(string expression) { DataTable table = new DataTable(); table.Columns.Add("expression", typeof(string), expression); DataRow row = table.NewRow(); table.Rows.Add(row); return double.Parse((string)row["expression"]); } } 班级计划 { 静态void Main(字符串[]参数) { 控制台写入线(评估(“(4+8)*2”); Console.ReadKey(); } 公共静态双重求值(字符串表达式) { DataTable=新的DataTable(); table.Columns.Add(“表达式”、typeof(字符串)、表达式); DataRow行=table.NewRow(); table.Rows.Add(行); 返回double.Parse((字符串)行[“表达式”]); } }
您可以看一看:在我的使用中,该解决方案比NCalc快约1.5倍,同时具有同等的稳定性(至少就我所做的而言)。它处理布尔表达式的方式与NCalc相同。这应该更多地宣传。这不处理幂或平方根。这个解决方案是完美的简单表达式,因为我需要它。谢谢你重新发布。同时我发现了一个问题:带分数的数字(如1.5)被解析为点(.)是唯一允许的分隔符。这是正确的吗?我能在每种语言中都依赖它吗?在德语中,分数的标准分隔符是komma(,)。但是当我使用它时,解析失败。zreptil:您必须确保表达式中的所有数值都使用不变量文化-->写入字符串,即:myDouble.ToString(System.Globalization.CultureInfo.InvariantCulture)