14
int n = 5;
int quorum = Math.Floor(n / 2) + 1;

クォーラムの値は3になると予想しています。しかし、これはVisualStudioで発生するエラーです。

次のメソッドまたはプロパティ間で呼び出しがあいまいです:'System.Math.Floor(double)'と'System.Math.Floor(decimal)'

どうすれば修正できますか?どこで私は間違えましたか?

4

4 に答える 4

32

を使用する必要はありませんMath.Floor。すべての項が整数であるため、.NETは整数除算を実行し、出力の残りの部分を自動的に切り捨てます。

エラーが発生する理由については、前述のように、整数除算の結果は依然として整数です。整数を四捨五入することはできないため(切り捨てる小数部分はありません)、の過負荷はありませFloorintdecimal呼び出しは結果をまたは最初に変換する必要がdoubleあり、コンパイラーはどちらが必要かを認識しません(実際にはどちらでもありません)。

于 2012-04-13T00:34:49.120 に答える
4

n / 2は整数除算であるため、結果は整数になります。実際には、Math.Floor()ここで行う必要はまったくありません。

int quorum = n / 2 + 1;

の期待される結果が得られ3ます。

于 2012-04-13T00:35:20.993 に答える
3

Floorメソッドはdouble値とdecimal値のみを受け入れますが、intはそれらの両方に自動的に適合します。intからdecimalまたはdoubleへのキャストを使用してから、次のようにintに戻すことができます。

int n = 5;
int quorum = (int)Math.Floor((decimal)n / 2) + 1;

また

int n = 5;
int quorum = (int)Math.Floor((double)n / 2) + 1;
于 2012-04-13T00:39:25.533 に答える
2

2.0で除算して、結果の数値が2倍になるようにします。n / 2自体は、Math.Floor(double)またはMath.Floor(decimal)のいずれかを選択した場合に、コンパイラーにキャスト先を指示しません。

int n = 5;
int quorum = (int)Math.Floor(n / 2.0) + 1;
于 2012-04-13T00:35:54.817 に答える