int fieldGoals = int.Parse(Console.ReadLine());
int fieldGoalAttempts = int.Parse(Console.ReadLine());
int threePointFieldGoals = int.Parse(Console.ReadLine());
int turnovers = int.Parse(Console.ReadLine());
int offensiveRebounds = int.Parse(Console.ReadLine());
int opponentDefensiveRebounds = int.Parse(Console.ReadLine());
int freeThrows = int.Parse(Console.ReadLine());
int freeThrowAttempts = int.Parse(Console.ReadLine());
double eFG = Math.Round( (fieldGoals + 0.5 * threePointFieldGoals) / fieldGoalAttempts );
double TOV = Math.Round( turnovers / (fieldGoalAttempts + 0.44 * freeThrowAttempts + turnovers) );
double ORB = Math.Round( offensiveRebounds / (offensiveRebounds + opponentDefensiveRebounds) );
double FT = Math.Round( freeThrows / fieldGoalAttempts );
问题在于double ORB
和double FT
。
出于某种原因,我无法使用Math.Round
。它说:
以下方法或属性之间的调用不明确: " Math.Round(双)"和" Math.Round(十进制)"。
我只是不知道为什么前两个工作,但后两个不工作。
答案 0 :(得分:4)
在前两次调用中,您向两者添加了一些内容。 0.5
和0.44
都将值转换为双精度值,因为0.5
和0.44
都被视为双精度数。但是当你使用后两个时,它们都只使用整数,既不是双精度也不是十进制,并且可以转换为其中任何一个。要解决此问题,您只需执行Math.Round( (double) (*calculations*) );
或者,实际上更好的方法是将值的一个转换为double - 这样,它将以double计算除法。
(double)offensiveRebounds / (offensiveRebounds + opponentDefensiveRebounds)
(double)freeThrows / fieldGoalAttempts
答案 1 :(得分:2)
您正在使用Math.Round
值来调用int
。您可能希望先将它们转换为double
:Math.Round( 1.0 * freeThrows...)
。
没有Math.Round(int)
overloaod,但double
和decimal
和int
的重载可以轻微转换为两者。因此,电话会很模糊。
答案 2 :(得分:1)
您尝试分配整数 - 结果将是整数。所以,你不能围绕这个数字。在分割和舍入之前将其转换为双倍:
double ORB = Math.Round( (double)offensiveRebounds / (offensiveRebounds + opponentDefensiveRebounds) );
double FT = Math.Round( (double)freeThrows / fieldGoalAttempts );
答案 3 :(得分:0)
在前两个中,您隐式将参数转换为Math.Round为double,其中double(即0.5和0.44)用作倍增因子。
在第二个中,你还没有。