int n = 5;
int quorum = Math.Floor(n / 2) + 1;
我期待法定人数达到值3.但这是我在VisualStudio中得到的错误:
以下方法或属性之间的调用不明确:'System.Math.Floor(double)'和'System.Math.Floor(decimal)'
我该如何纠正?我哪里出错了?
答案 0 :(得分:22)
您无需使用Math.Floor
。因为所有术语都是整数,所以.NET将执行整数除法,无论如何都会自动截断输出的其余部分。
至于为什么你得到错误,如上所述,整数除法的结果仍然是一个整数。因为你不能放置一个整数(没有向下舍入的小数部分),所以Floor
的重载不会超过int
。调用必须首先将结果转换为decimal
或double
,并且编译器不知道您想要哪一个(事实上,它们都不是)。
答案 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;