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。
修改方案有效的原因
你用到的两种修改方式,本质都是让除法运算从整数除法变成浮点数除法:
- 调整运算顺序:比如
x * 9 / 5,由于x是double类型,运算时整数9会被自动提升为double类型,x*9得到的是浮点数结果,再除以5(同样被提升为double),最终得到正确的浮点数商。(x-32)*5/9的逻辑同理,先通过x-32得到浮点数,后续的乘法、除法都按浮点数规则计算。 - 给整数添加
.0:比如把9/5改成9.0/5.0,此时运算数都是double类型,除法会按照浮点数规则计算,得到精确的小数结果,代入公式后自然能得到正确输出。
内容的提问来源于stack exchange,提问作者excal.rs
相关产品推荐
相关产品推荐

