在for循环中难以找到问题

时间:2018-10-29 16:01:36

标签: c++ for-loop

我正在编写一个程序,用户在其中输入参赛者的姓名并像比赛门票一样购买。我试图找出每个参赛者获胜的机会百分比,但由于某种原因,其返回零,这是代码

for(int i = 0; i < ticPurch.size(); i++){
    totalTics = ticPurch[i] + totalTics;                                              //Figuring out total amount of ticket bought
}
    cout << totalTics;

for (int i = 0; i < names.size(); i++){
    cout << "Contenstant "  << "   Chance of winning " << endl; 
    cout << names[i] << "   " << ((ticPurch.at(i))/(totalTics)) * 100 << " % " << endl; //Figuring out the total chance of winning 

}
    ticPurch is a vector of the the tickets each contestant bought and names is a vector for the contestants name. For some reason the percent is always returning zero and I don't know why

 return 0;

1 个答案:

答案 0 :(得分:7)

通过截断小数部分将整数除以整数gives you an integer

由于您的值小于1,因此结果始终为零。

您可以将操作数转换为浮点类型以获得所需的计算:

(ticPurch.at(i) / (double)totalTics) * 100

然后可能会舍入该结果,因为您似乎想要整数结果:

std::floor((ticPurch.at(i) / (double)totalTics) * 100)

我首选的方法是完全避免浮点(总是很好!),是乘以计算的分辨率 first

(ticPurch.at(i) * 100) / totalTics

这将始终舍入 ,因此请注意,如果您决定使用std::round(或std::ceil)而不是std::floor在上面的示例中。算术欺骗可以模仿那些需要的人。

现在,而不是例如(3/5) * 100(即0*100(即0)),例如(3*100)/5(即300/5(即60)。