作业答疑:如何通过static_cast结合加0.5实现厘米转英尺/英寸的正确取整
问题排查与修正方案
我来帮你搞定这个身高转换的问题!你的代码核心问题出在取整时机错误和整数截断导致的精度丢失上,咱们一步步理清楚:
问题根源分析
- 整数截断导致基础数值错误:你直接把
cm / CM_TO_INCHES的浮点结果赋值给int类型的inches,这会直接砍掉小数部分(比如182cm转英寸约是71.65,直接转int就变成71,而不是作业要求的四舍五入到72),后续的英尺和剩余英寸计算全是基于错误的数值,结果自然不对。 - 多余的取整操作:你在输出
feet和inchesRemainder时加0.5取整,但这两个值本身是基于被截断的inches算出的整数,加0.5再转int完全是画蛇添足,反而让逻辑混乱。
正确实现思路
作业要求只能用加0.5的方式取整,正确的流程应该是:
- 先对总英寸数做四舍五入:把厘米转成英寸的浮点值后,立刻加0.5再转成int,完成取整操作——这一步必须在拆分英尺和英寸之前做,确保基础数值准确。
- 用整数值拆分英尺和英寸:取整后的总英寸数直接做整数除法(÷12)得到英尺,取模(%12)得到剩余英寸,这两个结果本身就是整数,不需要再取整。
修正后的代码
// Height conversion assignment from cm to feet and inches #include <iostream> using namespace std; const float CM_TO_INCHES = 2.54; const int INCHES_TO_FEET = 12; int main() { int cm, totalInches, feet, inchesRemainder; cout << "Enter the height in centimeters: "; cin >> cm; // 核心修正:先对总英寸数做四舍五入取整(符合作业要求的加0.5方式) totalInches = static_cast<int>(cm / CM_TO_INCHES + 0.5); feet = totalInches / INCHES_TO_FEET; inchesRemainder = totalInches % INCHES_TO_FEET; cout << cm << " cm(s) = "; cout << feet << " foot (feet) and "; cout << inchesRemainder << " inch(es) " << endl; return 0; }
测试验证
- Run 1(182cm):182/2.54≈71.65 → 加0.5得72.15 → 转int为72 → 72÷12=6英尺,72%12=0英寸,符合预期输出。
- Run 2(165cm):165/2.54≈64.96 → 加0.5得65.46 → 转int为65 → 65÷12=5英尺,65%12=5英寸,符合预期输出。
- Run 3(140cm):140/2.54≈55.12 → 加0.5得55.62 → 转int为55 → 55÷12=4英尺,55%12=7英寸,符合预期输出。
这样修改后,代码完全符合作业要求,也能输出正确结果了!
内容的提问来源于stack exchange,提问作者user20120602
相关产品推荐
相关产品推荐

