双变量类型输出始终为0

时间:2013-10-11 00:24:01

标签: c++ c double

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

2 个答案:

答案 0 :(得分:6)

在没有看到代码的情况下我无法100%确定,但我的猜测是你要划分这样的值:

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

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

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

double ratio = (double)numWins / numLosses;

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

希望这有帮助!

答案 1 :(得分:2)

在大多数编程语言中,两个整数之间的除法是整数。因此,5 / 10将提供01 / 109 / 10也是如此。这是在赋值给结果变量之前发生的,因此结果变量是double的事实是无关紧要的。您需要将除数或被除数转换为双精度才能启动浮点计算。