C++中浮点变量cel始终求值为0的问题排查与解决
解决华氏转摄氏计算结果始终为0的问题
你的问题根源出在整数除法的截断特性上:代码里的(5/9)是两个整数相除,在C++中这种运算会自动舍弃小数部分,直接得到整数结果0。不管后面乘以什么数值,最终cel都会被计算为0,进而导致开尔文温度始终是273.15。
修复方法
把除法操作中的至少一个操作数改为浮点数,触发浮点除法逻辑,就能得到正确的比值:
- 可以用浮点字面量:
(5.0 / 9)或(5 / 9.0),如果要匹配float类型也可以用5.0f/9.0f - 或者通过强制类型转换:
(static_cast<float>(5)/9)
修改后的完整函数代码
// Celcius function void showCelcius(float f) { float cel, kel; cel = (5.0f / 9.0f) * (f - 32); // 使用浮点字面量执行除法 cout << cel << endl; // 测试cel的计算结果 kel = cel + 273.15; cout << fixed << showpoint << setprecision(1); cout << f << " Fahrenheit = " << cel << " Celcius\n"; temps[totalCount][0] = f; temps[totalCount][1] = cel; temps[totalCount][2] = kel; }
修改后,5.0f/9.0f会得到正确的浮点比值(约0.555...),再乘以(f-32)就能算出准确的摄氏温度,开尔文温度的计算也会随之正常。
内容的提问来源于stack exchange,提问作者TJream
相关产品推荐
相关产品推荐

