在C#中使用bodmas求解方程

时间:2013-10-08 05:27:24

标签: c#

我有类似(7+((8%2)(7%3)))的方程式。我想用bod-mas来解决这个问题:第一个括号应该在分割,多次,加法和减法后求解。

我有一个程序,用户使用工资头像基本工资等创建公式。之后我发现他们的价值就像上面的等式,现在我想解决它。

我访问了http://www.codeproject.com;他们给出了一个解决方案:

string equationString = "(7+((8%2)(7%3)))";
string explicitMultiply = equation String.Replace(")(", ")*(");

但它不起作用。为什么呢?

4 个答案:

答案 0 :(得分:2)

C#有operator precedence

  

((8%2)(7%3))//我累了,但它给了我一个错误方法名称   预期

这是结果

(8 % 2) //return 0
(7 +0 ) // returns 7

最后

(7 + ((8 % 2)*(7 % 3)))  //return 7

更新

您的代码完全是一个字符串,不会执行该字符串以返回整数

string equationString = "(7+((8%2)(7%3)))";
 string explicitMultiply = equationString.Replace(")(", ")*(");
 Console.WriteLine(explicitMultiply); 
  

作为字符串返回(7 +((8%2)*(7%3)))

如果您想进行NCalcFLEE

之类的等式转换,请注意

另请查看BODMAS principle in .NET

答案 1 :(得分:0)

你真的在问隐式乘法。您引用的解决方案不适用于“7(3 + 4)”等情况。只有在隐式乘法的两边都有一个括号时才会起作用。

在实践中很难实现隐式乘法。规则是说如果由于缺少运算符而导致解析失败,则应添加乘法符号。

引用的解决方案在右边,但不完整。

答案 2 :(得分:0)

如果要评估该字符串,则可以使用http://ncalc.codeplex.com/这是一个开源框架。

您也可以使用

中定义的方法对其进行评估

Evaluating string "3*(4+2)" yield int 18

这就像:

    string equationString = "(7+((8%2)(7%3)))";
    string explicitMultiply = equationString.Replace(")(", ")*(");
    double f = Evaluate(explicitMultiply);

    static double Evaluate(string expression)
    {
        var loDataTable = new DataTable();
        var loDataColumn = new DataColumn("Eval", typeof(double), expression);
        loDataTable.Columns.Add(loDataColumn);
        loDataTable.Rows.Add(0);
        return (double)(loDataTable.Rows[0]["Eval"]);
    }

我希望它会对你有所帮助。 :)

答案 3 :(得分:0)

看起来您需要两个步骤:首先,您需要查看字符串表达式并替换'%'用' / 100 *'然后你可以使用阿列克谢的how to parse math expressions