CS50第2周hours练习:使用float仍截断平均时长问题排查
CS50 Week 2 Hours 练习题:平均时长被截断为整数的问题解决
你的代码计算总时长没问题,但平均时长变成整数的原因很明确:整数除法的截断特性。
在计算平均的分支里,你写的是return (float) (tot / weeks);——这里tot和weeks都是int类型,C语言会先执行整数除法tot / weeks,直接丢掉小数部分得到整数结果,之后再把这个整数转成float,自然就没有小数了。
修正方法
只需要把其中一个操作数先转换成float,让除法按浮点数规则运算:
把原有的平均分支return语句改成下面任意一种都可以:
return (float) tot / weeks;// 先将tot转为float,weeks会自动提升为float类型参与运算return (float)tot / (float)weeks;// 显式把两个操作数都转成float
修正后的完整calc_hours函数
float calc_hours(int hours[], int weeks, char output) { int tot = 0; for (int i = 0; i < weeks; i++) { tot = hours[i] + tot; } if (output == 'T') { return (float) tot; } return (float) tot / weeks; // 这里是修正后的代码 }
这样计算平均时,除法会保留小数部分,最终输出的结果就是正确的浮点数了。
内容的提问来源于stack exchange,提问作者Har
相关产品推荐
相关产品推荐

