C#.NET中的方法或属性之间存在歧义

C#.NET中的方法或属性之间存在歧义,c#,C#,我希望仲裁的值为3。但这就是我在VisualStudio中遇到的错误: 以下方法或属性之间的调用不明确:“System.Math.Floor(double)”和“System.Math.Floor(decimal)” 我如何纠正它?我哪里出错了?您不需要使用Math.Floor。因为所有的项都是整数,.NET将执行整数除法,这将自动截断输出的剩余部分 至于为什么会出现错误,如上所述,整数除法的结果仍然是整数。因为您不能对整数进行下限运算(没有小数部分进行取整),所以不会出现需要int的floor

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

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


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

您不需要使用
Math.Floor
。因为所有的项都是整数,.NET将执行整数除法,这将自动截断输出的剩余部分


至于为什么会出现错误,如上所述,整数除法的结果仍然是整数。因为您不能对整数进行下限运算(没有小数部分进行取整),所以不会出现需要
int
floor
重载。调用必须首先将结果转换为十进制或双精度,编译器不知道您想要哪一个(事实上也是如此)。

n/2是整数除法-因此结果是整数-实际上根本不需要执行
Math.Floor()
,只需执行即可

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

将产生
3

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


Floor方法只接受双精度和十进制值,但int会自动适应这两个值。您可以使用从int到decimal或double的转换,然后返回int,如下所示:

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


两个石膏和一个地板?那太傻了。整数除法消除了任何必要的铸造或地板-他自找的。有些人只是喜欢发现事物是如何运作的,而不一定一开始就用正确的方式去做。我几乎可以肯定,克莱瓦克斯知道如何在没有地板的情况下做到这一点。当然,这只是我的意见。不,我没有尝试代码。我已经纠正了这个错误-它与Floor的返回值有关,而不是用法。C#将告诉您何时无法执行隐式转换,而VB似乎要求您更加明确。(虽然它确实提供了一个方便的整数除法函数(“\”)-例如
将一个整数变为整数=10\3
-来完成此操作。)
int n = 5;
int quorum = (int)Math.Floor(n / 2.0) + 1;
int n = 5;
int quorum = (int)Math.Floor((decimal)n / 2) + 1;
int n = 5;
int quorum = (int)Math.Floor((double)n / 2) + 1;