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

我希望 quorum 的值为 3。但这是我在 VisualStudio 中遇到的错误:

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

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

4

4 回答 4

32

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

至于为什么会出现错误,如上所述整数除法的结果仍然是整数。因为你不能对整数取底(没有小数部分可以向下舍入),所以不会出现Floor需要int. 该调用必须将结果转换为 adecimaldoublefirst,并且编译器不知道您想要哪个(实际上两者都不知道)。

于 2012-04-13T00:34:49.120 回答
4

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

int quorum = n / 2 + 1;

将产生 的预期结果3

于 2012-04-13T00:35:20.993 回答
3

Floor 方法只接受 double 和 decimal 值,但 int 会自动适应它们。您可以使用从 int 转换为十进制或双精度然后返回到 int 的方式:

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

或者

int n = 5;
int quorum = (int)Math.Floor((double)n / 2) + 1;
于 2012-04-13T00:39:25.533 回答
2

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

int n = 5;
int quorum = (int)Math.Floor(n / 2.0) + 1;
于 2012-04-13T00:35:54.817 回答