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

C程序温度转换返回错误double值的原因及解决咨询

温度转换C程序输出错误的原因分析

原问题代码

int main(){
    double x = 10;
    double Fahrenheit = (x * (9/5)) + 32;
    double Celsius = (5 / 9) * (x - 32);

    printf("%lf\n", Fahrenheit);
    printf("%lf\n", Celsius);
    return 0;
}

实际输出

42.000000
-0.000000

预期输出

50.00000
-12.22222

错误核心原因

问题出在C语言的整数除法规则:当两个整数进行除法运算时,结果会自动截断小数部分,只保留整数商。

  • 原代码中9/5是两个整数相除,计算结果为1(而非预期的1.8),代入Fahrenheit的计算公式后:10 * 1 + 32 = 42,和实际输出一致。
  • 同理5/9是两个整数相除,结果为0(而非预期的0.555...),代入Celsius的计算公式后:0 * (10-32) = 0,也就是输出中的-0.000000。

修改方案有效的原因

你用到的两种修改方式,本质都是让除法运算从整数除法变成浮点数除法:

  1. 调整运算顺序:比如x * 9 / 5,由于x是double类型,运算时整数9会被自动提升为double类型,x*9得到的是浮点数结果,再除以5(同样被提升为double),最终得到正确的浮点数商。(x-32)*5/9的逻辑同理,先通过x-32得到浮点数,后续的乘法、除法都按浮点数规则计算。
  2. 给整数添加.0:比如把9/5改成9.0/5.0,此时运算数都是double类型,除法会按照浮点数规则计算,得到精确的小数结果,代入公式后自然能得到正确输出。

内容的提问来源于stack exchange,提问作者excal.rs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:20:32