int n = 5;
int quorum = Math.Floor(n / 2) + 1;
クォーラムの値は3になると予想しています。しかし、これはVisualStudioで発生するエラーです。
次のメソッドまたはプロパティ間で呼び出しがあいまいです:'System.Math.Floor(double)'と'System.Math.Floor(decimal)'
どうすれば修正できますか?どこで私は間違えましたか?
int n = 5;
int quorum = Math.Floor(n / 2) + 1;
クォーラムの値は3になると予想しています。しかし、これはVisualStudioで発生するエラーです。
次のメソッドまたはプロパティ間で呼び出しがあいまいです:'System.Math.Floor(double)'と'System.Math.Floor(decimal)'
どうすれば修正できますか?どこで私は間違えましたか?
を使用する必要はありませんMath.Floor
。すべての項が整数であるため、.NETは整数除算を実行し、出力の残りの部分を自動的に切り捨てます。
エラーが発生する理由については、前述のように、整数除算の結果は依然として整数です。整数を四捨五入することはできないため(切り捨てる小数部分はありません)、の過負荷はありませFloor
んint
。decimal
呼び出しは結果をまたは最初に変換する必要がdouble
あり、コンパイラーはどちらが必要かを認識しません(実際にはどちらでもありません)。
n / 2は整数除算であるため、結果は整数になります。実際には、Math.Floor()
ここで行う必要はまったくありません。
int quorum = n / 2 + 1;
の期待される結果が得られ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;
2.0で除算して、結果の数値が2倍になるようにします。n / 2自体は、Math.Floor(double)またはMath.Floor(decimal)のいずれかを選択した場合に、コンパイラーにキャスト先を指示しません。
int n = 5;
int quorum = (int)Math.Floor(n / 2.0) + 1;