为什么我的分区结果似乎已关闭?
我不明白为什么我的部门的结果会四舍五入?
#include #include using namespace std; int rVote, oVote, dVote; int rTotal, oTotal, dTotal, total; int rPercent, dPercent, oPercent; bool loop(char vote){ switch(toupper(vote)){ case 'D': dVote = 1; dTotal = dTotal + dVote; return true; case 'R': rVote = 1; rTotal = rTotal + rVote; return true; case 'O': oVote = 1; oTotal = oTotal + oVote; return true; case 'Q': return false; } return true; } int main(){ char vote; do{ printf("Enter Vote [D/R/O] or Q to quit: "); scanf("%c%*c", &vote); } while (loop(vote)); total = dTotal + rTotal + oTotal; rPercent = ((rTotal/total)*100); dPercent = ((dTotal/total)*100); oPercent = ((oTotal/total)*100); printf("Democrate total vote %d: %d%%\n", dTotal, dPercent); printf("Republican total vote %d: %d%%\n", rTotal, rPercent); printf("Other total vote %d: %d%%\n", oTotal, oPercent); }
太棒了我真的很蠢….为什么我的*Percent
没有在这个c / c ++程序中打印%值?
谢谢。
这是因为你正在进行整数除法。 C / C ++中的整数除法向下舍入。 所以你的代码如下:
rPercent = ((rTotal/total)*100); dPercent = ((dTotal/total)*100); oPercent = ((oTotal/total)*100);
全部四舍五入到0。
要解决此问题,您应该转换为浮点类型:
rPercent = (int)((double)rTotal/total*100); dPercent = (int)((double)dTotal/total*100); oPercent = (int)((double)oTotal/total*100);
编辑:
由于舍入行为,上面的代码可能会给出一些奇怪的结果。 也许这样的事情可能更合适,因为它舍入到最接近的%:
rPercent = (int)((double)rTotal/total*100 + 0.5); dPercent = (int)((double)dTotal/total*100 + 0.5); oPercent = (int)((double)oTotal/total*100 + 0.5);
因为你先把它们归零:)
为每个百分比执行此操作
dPercent = ((dTotal*100)/total);