有人能告诉我为什么变量百分比= 0?它应该是33.3333对吗? (2/6)
因为当我运行下面的函数时,结果是
总行数= 6
奇数行= 2
奇数行百分比= 0
bool count_odd_lines(string a, string b)
{
ifstream in;
ofstream out;
in.open(a.c_str());
out.open(b.c_str());
string s;
int count = 0;
int odd = 0;
if (in && out)
{
while (getline(in, s))
{
count++;
if (s.length() % 2 != 0) odd++;
}
out << "Total lines = " << count << endl;
out << "Odd lines = " << odd << endl;
double percent = odd/count;
out << "Percent odd lines = " << setprecision(4) << percent <<endl;
return true;
}
else return false;
in.close();
out.close();
}
答案 0 :(得分:10)
问题是你正在进行整数除法。变化:
double percent = odd/count;
到
double percent = static_cast<double>(odd)/count;
答案 1 :(得分:10)
有两个问题:
odd
和count
都是整数,因此odd/count
执行整数(即截断)除法。33.33
而不是0.3333
),您需要将结果乘以100
。您可以解决这两个问题:
double percent = odd * 100.0 / count;
乘法进行缩放,并将后续除法转换为浮点除法。
答案 2 :(得分:3)
整数除法总是产生整数; count
和odd
都是整数,因此odd/count
会给出低于实际值的最大整数。
尝试double percent = static_cast<double>(odd)/count;
强制进行浮点除法。
答案 3 :(得分:1)
double percent = odd/count;
错了。它会在分配之前对分部进行四舍五入。将所有变量转换为浮点数。
答案 4 :(得分:1)
因为count
和odd
都是整数,所以计算odd / count
也基于整数。将count
和odd
声明为双打,你很高兴。