0

对于一个任务,我必须创建一个“石头剪刀布蜥蜴 spock”​​游戏,我必须在最后输出奖金的百分比。在程序中,我计算玩家 A 和 B 赢得的游戏数量,包括平局、总游戏数以及每个玩家的获胜百分比。除了百分比是变量类型之外,所有变量都int除外。double当我计算百分比(赢得的游戏数/总游戏数)时,结果为 0。任何想法为什么?抱歉,我无法提供任何代码,这是一项作业,我不允许在网上任何地方发布它。

4

2 回答 2

6

如果没有看到代码,我不能 100% 确定,但我的猜测是你正在划分这样的值:

int numWins   = /* ... */
int numLosses = /* ... */
double ratio = numWins / numLosses; // <-- Error!

在 C 和 C++ 中,最后一行是逻辑错误。虽然您将结果存储为 a double,但因为您将ints 相除,所以除法是作为整数除法完成的,然后存储在 a 中double。C 和 C++ 在决定使用什么除法时不会查看您分配给的变量的类型;两个 s 的比率int总是使用整数除法计算。

要解决此问题,您可以添加演员表:

double ratio = (double)numWins / numLosses;

这将转换numWins为 a double,这确保除法是作为浮点除法完成的,因为至少有一个操作数是 a double。那应该可以解决您的问题。

希望这可以帮助!

于 2013-10-11T00:27:12.683 回答
2

在大多数编程语言中,两个整数之间的除法是一个整数。因此, 5 / 10will give 0, as will 1 / 10and 9 / 10. 这发生分配给结果变量之前,因此结果变量是 a 的事实double是无关紧要的。您需要将除数或被除数转换为双精度数才能启动浮点计算。

于 2013-10-11T00:27:31.550 回答