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

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

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

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

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

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

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

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

 int quorum = n / 2 + 1; 

将产生3的预期结果。

Floor方法只接受double和decimal值,但int会自动适合它们。 您可以使用int转换为decimal或double,然后返回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;