C#以下方法或属性之间的调用不明确:'System.Math.Round(double,int)'和'System.Math.Round(decimal,int)

37 c# ambiguity

由于以下错误,我的代码无法编译:

以下方法或属性之间的调用不明确:'System.Math.Round(double,int)'和'System.Math.Round(decimal,int)

我的代码是

Math.Round(new FileInfo(strFilePath).Length / 1024, 1)
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

谢谢

Arc*_*rus 45

Math.Round(new FileInfo(strFilePath).Length / 1024d, 1)
Run Code Online (Sandbox Code Playgroud)

  • 这比接受的答案更好,你不应该使用".0"隐式投射,使用'd'后缀是明确的和首选的. (5认同)
  • 更好的是,但是在_why_中接受的答案中的解释非常有用. (2认同)

Luc*_*ero 29

问题是你进行整数除法(结果也在a中int),a int可以隐式转换为double和decimal.因此,您需要确保表达式导致其中一个; double可能就是你想要的.

Math.Round(new FileInfo(strFilePath).Length / 1024.0, 1)
Run Code Online (Sandbox Code Playgroud)


edo*_*oft 6

Math.Round((double) (new FileInfo(strFilePath).Length / 1024), 1)
Run Code Online (Sandbox Code Playgroud)

  • 问题在于除法仍然是将被截断的整数除法,因此即使将其强制转换为双精度,舍入也是没有意义的。 (2认同)