2009-04-21 17 views
25

以下のエラーのため、コードがコンパイルされません:C#次のメソッドまたはプロパティ間で呼び出しが曖昧です: 'System.Math.Round(double、int)'および 'System.Math.Round(decimal、int)

呼び出しは次のメソッドやプロパティの間であいまいです: 'System.Math.Round(ダブル、int型)' と「System.Math.Round(小数、整数)

私のコードは

です
Math.Round(new FileInfo(strFilePath).Length/1024, 1) 

どうすればこの問題を解決できますか?

おかげ

答えて

14

問題は、整数の除算(intでも結果)を作成し、intが暗黙的doubledecimalの両方に変換することができるということです。したがって、式の結果が必ず1つになるようにする必要があります。 doubleはおそらくあなたが望むものです。

Math.Round(new FileInfo(strFilePath).Length/1024.0, 1) 
40
Math.Round(new FileInfo(strFilePath).Length/1024d, 1) 
+5

これが受け入れ答えよりもずっといいです、あなたは暗黙的に「0.0" を使用してキャストしてはならない、 『D』接尾辞を使用すると、明示的で好ましいです。 – user275587

+1

良いですが、_why_に関する受け入れられた答えの説明は非常に役に立ちます。 – jmgardn2

3
Math.Round((double) (new FileInfo(strFilePath).Length/1024), 1) 
+0

なぜこれは負の1ですか?否定的な評価をしている理由を説明してください。彼のように私はちょうどそれをキャストするために私に論理的に見えます。 – PositiveGuy

+0

それは動作しません – Anton

+0

私は簡単な間違いを監督する場合、答えが正しいので、私は投票に反対します。しかし、新しいFileInfo(strFilePath).Length/1024をカッコで囲む必要がありました。 –

関連する問題