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

为何C++中给5/9加括号后温度转换结果为0?

问题原因分析

核心问题出在C++的整数除法规则上:

  • 当两个整数进行除法运算时,C++会执行截断式整数除法——直接丢弃小数部分,只保留整数结果。5和9都是整数字面量,所以5/9的计算结果是0,而非数学上的0.555...。

两种写法的运算差异

加括号的情况:(temperature_farenheit - 32) * (5 / 9)

括号强制改变了运算优先级,程序会先计算括号内的5/9,得到整数结果0;再用前面(47-32)=15(此时是double类型)乘以0,最终结果自然是0。

不加括号的情况:(temperature_farenheit - 32) * 5 / 9

运算顺序遵循乘除从左到右的规则:

  1. 先计算(47-32)=15,由于temperature_farenheit是double类型,结果为double的15.0;
  2. 乘以整数5时,整数会被自动提升为double类型,得到75.0;
  3. 再除以整数9,同样9被提升为double,执行浮点数除法得到8.33333。

和Python的区别

Python 3中,/运算符默认执行浮点数除法,哪怕操作数是整数,5/9也会直接返回0.555...的浮点数结果,因此相乘后得到正确的计算值。

解决方法

只要把其中一个整数字面量改为浮点数,就能让C++执行浮点数除法,无论加不加括号结果都正确:

temperature_celsius = (temperature_farenheit - 32) * (5.0 / 9);
// 或者写成5/9.0、(double)5/9都可以

内容的提问来源于stack exchange,提问作者dqproengineering

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:25:17