【问题标题】:Evaluate string with math operators [duplicate]使用数学运算符评估字符串 [重复]
【发布时间】:2011-08-15 21:14:50
【问题描述】:

有没有一种简单的方法来评估像这样的字符串 "(4+8)*2" 所以你会得到 24 的 int 值?

或者是否需要做很多工作才能完成这项工作...?

【问题讨论】:

标签: c# string parsing math evaluation


【解决方案1】:

其他人添加了此内容,然后将其删除。我认为这很酷,因为不需要 3rd 方库。

课程 { 静态无效主要(字符串 [] 参数) { Console.WriteLine(Evaluate("(4+8)*2")); Console.ReadKey(); } public static double Evaluate(字符串表达式) { 数据表表 = 新数据表(); table.Columns.Add("表达式", typeof(string), 表达式); 数据行行 = table.NewRow(); table.Rows.Add(row); return double.Parse((string)row["expression"]); } }

【讨论】:

  • 在我的使用中,这个解决方案比 NCalc 快大约 1.5 倍,同时同样稳定(至少对于我正在做的事情)。它处理布尔表达式与 NCalc 一样。这应该多做广告。
  • 这不处理幂或平方根。
  • 这个解决方案非常适合我需要的简单表达式。感谢您重新发布它。
  • 同时我发现了一个问题:带分数的数字(如 1.5)被解析为点 (.) 是唯一允许的分隔符。它是否正确?我可以在每种语言中都依赖它吗?在德语中,分数的标准分隔符是逗号 (,)。但是当我使用它时,解析失败。
  • zreptil:您必须确保表达式中的所有数值都使用 InvariantCulture 写入字符串 --> 即:myDouble.ToString(System.Globalization.CultureInfo.InvariantCulture)
【解决方案2】:

使用 Ncalc:

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

http://ncalc.codeplex.com/

此外,这个问题之前已经被问过,并且有一些有趣的答案,包括 Ncalc:Evaluating string "3*(4+2)" yield int 18

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2020-04-20
    • 2019-01-12
    • 1970-01-01
    • 2012-03-07
    • 2013-07-30
    相关资源
    最近更新 更多