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

为何printf打印变量中的浮点数结果与预期不符?

问题分析与解答

先看你给出的代码:

int main(void)
{
    double b = 11/2;
    double a = 2;
    printf("%lf\n", a + b);
    printf("%lf\n", b);
}

输出结果是7.000000和5.000000,而非预期的7.500000和5.500000,核心原因是C语言的整数除法规则:

  • 当两个操作数都是整数时,C语言会执行整数除法,直接截断小数部分,只保留整数商。这里11和2都是int类型,所以11/2的计算结果是整数5,而不是浮点数5.5。
  • 之后把整数5赋值给double类型的变量b,会自动做类型转换,把5转换成5.0,所以b的值是5.0,而非5.5。
  • 后续计算a + b就是2.0 + 5.0 = 7.0,打印出来自然是7.000000和5.000000。

而你直接传递5.5给printf能得到正确结果,是因为5.5本身就是浮点数,不存在整数截断的问题。

解决方法

如果要得到浮点除法的结果,只需要把其中一个操作数改为浮点类型,让编译器执行浮点除法:

// 两种写法都可以
double b = 11.0 / 2;
// 或者
double b = 11 / 2.0;

这样11.0/2会按照浮点规则计算,得到5.5,赋值给b后就是5.5,此时a + b的结果就是7.5,打印出来就符合你的预期了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:20:56