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

C语言入门疑问:为何0.1+0.2==0.3返回假,1+2==3.0返回真?

关于0.1+0.2≠0.3与1+2==3.0的疑问解答

你的理解有误,0.1、0.2、0.3在C语言里默认都是double类型,类型一致不是问题的核心,真正原因在于浮点数的二进制精度限制:

  • 十进制的0.1、0.2无法用二进制浮点数精确存储,它们在内存中是近似值。
  • 0.1的二进制近似值加上0.2的二进制近似值,得到的结果和0.3的二进制近似值存在微小差异,因此0.1 + 0.2 == 0.3返回假(0)。

而1 + 2 == 3.0返回真(1)的原因是:

  • 1和2是int类型,相加结果为int类型的3。
  • 在与double类型的3.0比较时,C语言会自动把int类型的3隐式转换为double类型的3.0。
  • 整数3可以被double类型精确表示,转换后的3.0和字面量3.0完全相等,所以比较结果为真。

测试代码:

#include <stdio.h>
int main()
{
  printf("0.1 + 0.2 == 0.3: %d\n", 0.1 + 0.2 == 0.3); // 返回0(假)
  printf("1 + 2 == 3.0: %d\n", 1 + 2 == 3.0);         // 返回1(真)
  return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:29