int n = 5;
int quorum = Math.Floor(n / 2) + 1;
我希望 quorum 的值为 3。但这是我在 VisualStudio 中遇到的错误:
以下方法或属性之间的调用不明确:“System.Math.Floor(double)”和“System.Math.Floor(decimal)”
我该如何纠正?我哪里做错了?
int n = 5;
int quorum = Math.Floor(n / 2) + 1;
我希望 quorum 的值为 3。但这是我在 VisualStudio 中遇到的错误:
以下方法或属性之间的调用不明确:“System.Math.Floor(double)”和“System.Math.Floor(decimal)”
我该如何纠正?我哪里做错了?
您无需使用Math.Floor
. 因为您的所有术语都是整数,所以 .NET 将执行整数除法,无论如何都会自动截断输出的其余部分。
至于为什么会出现错误,如上所述整数除法的结果仍然是整数。因为你不能对整数取底(没有小数部分可以向下舍入),所以不会出现Floor
需要int
. 该调用必须将结果转换为 adecimal
或double
first,并且编译器不知道您想要哪个(实际上两者都不知道)。
n/2 是一个整数除法 - 所以结果是一个整数 - 实际上根本不需要在Math.Floor()
这里做 - 只是做
int quorum = n / 2 + 1;
将产生 的预期结果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;
除以 2.0 以确保结果数字是双精度数。当在 Math.Floor(double) 或 Math.Floor(decimal) 之间进行选择时,n/2 本身并不会告诉编译器将其转换为什么。
int n = 5;
int quorum = (int)Math.Floor(n / 2.0) + 1;