You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:39:21