对于一项任务,我必须创建一个“石头布剪刀蜥蜴spock”游戏,我必须在游戏结束时输出赢利的百分比。在程序中,我计算了玩家A和B赢得的游戏的数量,包括平局游戏,玩的游戏总数,以及每个玩家的获胜百分比。除了percentage是一个double变量类型之外,所有的变量都是int。当我计算百分比(赢得的游戏/总游戏)时,我得到的结果是0。你知道为什么吗?抱歉,我不能提供任何代码,这是一个作业,我不允许在任何地方在线发布它。
发布于 2013-10-11 08:27:13
如果不看代码,我不能100%确定,但我猜你是这样划分值的:
int numWins = /* ... */
int numLosses = /* ... */
double ratio = numWins / numLosses; // <-- Error!在C和C++中,最后一行是逻辑错误。尽管您将结果存储为double,但因为您将两个int相除,所以除法是以整数除法完成的,然后存储在double中。C和C++在决定使用哪种除法时,不会查看赋值变量的类型;两个int的比率总是使用整数除法来计算的。
要解决此问题,您可以添加一个强制转换:
double ratio = (double)numWins / numLosses;这将numWins强制转换为double,这确保了除法是作为浮点除法完成的,因为至少有一个操作数是double。这应该会解决你的问题。
希望这能有所帮助!
发布于 2013-10-11 08:27:32
在大多数编程语言中,两个整数之间的除法是一个整数。因此,5 / 10将提供0,1 / 10和9 / 10也将提供。这发生在对结果变量赋值之前,所以结果变量是double这一事实是不相关的。您需要将除数或被除数转换为双精度,才能进行浮点计算。
https://stackoverflow.com/questions/19308353
复制相似问题