对于一个任务,我必须创建一个“石头剪刀布蜥蜴 spock”游戏,我必须在最后输出奖金的百分比。在程序中,我计算玩家 A 和 B 赢得的游戏数量,包括平局、总游戏数以及每个玩家的获胜百分比。除了百分比是变量类型之外,所有变量都int
除外。double
当我计算百分比(赢得的游戏数/总游戏数)时,结果为 0。任何想法为什么?抱歉,我无法提供任何代码,这是一项作业,我不允许在网上任何地方发布它。
问问题
2109 次
2 回答
6
如果没有看到代码,我不能 100% 确定,但我的猜测是你正在划分这样的值:
int numWins = /* ... */
int numLosses = /* ... */
double ratio = numWins / numLosses; // <-- Error!
在 C 和 C++ 中,最后一行是逻辑错误。虽然您将结果存储为 a double
,但因为您将int
s 相除,所以除法是作为整数除法完成的,然后存储在 a 中double
。C 和 C++ 在决定使用什么除法时不会查看您分配给的变量的类型;两个 s 的比率int
总是使用整数除法计算。
要解决此问题,您可以添加演员表:
double ratio = (double)numWins / numLosses;
这将转换numWins
为 a double
,这确保除法是作为浮点除法完成的,因为至少有一个操作数是 a double
。那应该可以解决您的问题。
希望这可以帮助!
于 2013-10-11T00:27:12.683 回答
2
在大多数编程语言中,两个整数之间的除法是一个整数。因此, 5 / 10
will give 0
, as will 1 / 10
and 9 / 10
. 这发生在分配给结果变量之前,因此结果变量是 a 的事实double
是无关紧要的。您需要将除数或被除数转换为双精度数才能启动浮点计算。
于 2013-10-11T00:27:31.550 回答