2009-04-21 3 views
25

Мой код не будет компилироваться из-за ошибки ниже :C# Вызов неоднозначен между следующими методами или свойствами: 'System.Math.Round (double, int)' и 'System.Math.Round (decimal, int)

вызов неоднозначен между следующими методами или свойствами: 'System.Math.Round (двойной, целое)' и «System.Math.Round (десятичное, целое)

Мой код

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

Как это исправить?

Благодаря

ответ

14

Проблема заключается в том, что вы делаете целочисленное деление (результаты также в качестве int) и int может быть неявно преобразован в обоих double и decimal. Поэтому вам нужно убедиться, что выражение приводит к одному из них; double, вероятно, то, что вы хотите.

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

Это намного лучше, чем принято отвечать, вы не должны неявно с помощью».0" , используя„D“суффикс является явным и предпочтительным. – user275587

+1

Лучше да, но объяснение в принятом ответе на _why_ чрезвычайно полезно. – jmgardn2

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

Почему это отрицательный 1? Пожалуйста, объясните себя отрицательным растением, чтобы мы поняли, почему вы это сделали. Кажется логичным для меня просто бросить его, как он. – PositiveGuy

+0

Это не работает – Anton

+0

Я не согласен с правом голоса, так как ответ правильный, если вы контролируете ошибку, которую легко сделать. Но вам нужно было положить в скобках 'new FileInfo (strFilePath) .Length/1024', чтобы заставить его работать. –