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

その文字列を評価したい場合は、オープン ソース フレームワークである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 に答える