C#.NET中方法或属性之间的不一致

时间:2012-04-13 00:33:12

标签: c#

int n = 5;
int quorum = Math.Floor(n / 2) + 1;

我期待法定人数达到值3.但这是我在VisualStudio中得到的错误:

  

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

我该如何纠正?我哪里出错了?

4 个答案:

答案 0 :(得分:22)

您无需使用Math.Floor。因为所有术语都是整数,所以.NET将执行整数除法,无论如何都会自动截断输出的其余部分。

至于为什么你得到错误,如上所述,整数除法的结果仍然是一个整数。因为你不能放置一个整数(没有向下舍入的小数部分),所以Floor的重载不会超过int。调用必须首先将结果转换为decimaldouble,并且编译器不知道您想要哪一个(事实上,它们都不是)。

答案 1 :(得分:4)

n / 2是一个整数除法 - 所以结果是一个整数 - 实际上根本没有必要在这里做Math.Floor() - 只是做

int quorum = n / 2 + 1;

将产生3的预期结果。

答案 2 :(得分:3)

Floor方法只接受double和decimal值,但int会自动适合它们。您可以使用从int转换为decimal或double,然后再返回int:

int n = 5;
int quorum = (int)Math.Floor((decimal)n / 2) + 1;

OR

int n = 5;
int quorum = (int)Math.Floor((double)n / 2) + 1;

答案 3 :(得分:0)

除以2.0以确保结果数字是双精度数。当给出Math.Floor(double)或Math.Floor(decimal)之间的选择时,n / 2本身并不告诉编译器将它强制转换为什么。

int n = 5;
int quorum = (int)Math.Floor(n / 2.0) + 1;