1

我有像(7+((8%2)(7%3))). 我想用 bod-mas 解决这个问题:第一个括号应该在除法、乘法、加法和减法之后解决。

我有一个程序,其中用户使用基本工资等薪金头创建公式。之后,我发现它们的值类似于上面的等式,现在我想解决它。

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

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

但它不起作用。为什么?

4

4 回答 4

2

C# 有它的运算符优先级

((8%2)(7%3)) //我很累,但它给了我一个错误 Method Name expected

这是结果

(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等方程转换

还可以看看.NET 中的 BODMAS 原理

于 2013-10-08T05:36:40.957 回答
0

看起来您需要一个两步过程:首先,您需要检查字符串表达式并将 '%' 替换为 '/100 *' 然后您可以使用 Alexei 的如何解析数学表达式

于 2013-10-08T12:50:56.160 回答
0

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

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

引用的解决方案在正确的行上,但不完整。

于 2013-10-08T05:58:17.343 回答
0

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

您也可以使用定义的方法对其进行评估

评估字符串 "3*(4+2)" 产生 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"]);
    }

我希望它会帮助你。:)

于 2013-10-08T06:49:23.610 回答