2009-04-21 5 views
25

Mein Code wird aufgrund des unten angegebenen Fehlers nicht kompiliert :C# Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften nicht eindeutig: 'System.Math.Round (double, int)' und 'System.Math.Round (dezimal, int)

Der Anruf wird zwischen den folgenden Methoden oder Eigenschaften mehrdeutig: 'System.Math.Round (double, int)' und ‚System.Math.Round (dezimal, int)

My Code ist

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

Wie kann ich das beheben?

Dank

Antwort

14

Das Problem ist, dass Sie eine Integer-Division (Ergebnisse auch in einem int) und ein int sowohl auf double und decimal implizit konvertiert werden können machen. Daher müssen Sie sicherstellen, dass der Ausdruck in einem davon resultiert. double ist wahrscheinlich, was Sie wollen.

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

Das ist viel besser als die Antwort akzeptiert, sollten Sie nicht werfen implizit „0,0" , mit‚d‘Suffix ist explizit und bevorzugt verwendet wird. – user275587

+1

Besser ja, aber die Erklärung in der angenommenen Antwort zu _why_ ist extrem hilfreich. – jmgardn2

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

Warum ist das eine negative 1? Bitte erklären Sie sich negativ, also verstehen wir, warum Sie das getan haben. Es erscheint mir logisch, es so zu tun, wie er es getan hat. – PositiveGuy

+0

Es funktioniert nicht – Anton

+0

Ich stimme der Abstimmung nicht zu, da die Antwort richtig ist, wenn Sie den einfach zu machenden Fehler übersehen. Aber Sie müssen die 'neue FileInfo (strFilePath) .Length/1024' in Klammern setzen, damit es funktioniert. –

Verwandte Themen