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

为何这段C语言代码输出False而非True?

为什么这段C语言代码输出False而不是True?

问题出在浮点数的类型与精度差异上:

  • 代码里的0.1字面量默认是double类型(双精度浮点数),将它赋值给float类型变量f时,会被截断为单精度浮点数,这个过程会损失部分精度。
  • 执行if (f == 0.1)时,float类型的f会被隐式转换回double类型,但转换后的数值和原本的double类型0.1已不完全相等,因此比较结果为假,输出False。

解决方法

  1. 将字面量指定为float类型(加f后缀):
#include <stdio.h>
int main()
{
    float f = 0.1f;
    if (f == 0.1f)
        printf("True");
    else
        printf("False");
}
  1. 使用double类型变量匹配字面量类型:
#include <stdio.h>
int main()
{
    double f = 0.1;
    if (f == 0.1)
        printf("True");
    else
        printf("False");
}
  1. 实际开发中更稳妥的方式:不要直接用==比较浮点数,而是判断两个数的差值是否小于一个极小的阈值(比如1e-9),避免精度误差影响结果:
#include <stdio.h>
#include <math.h>
int main()
{
    float f = 0.1;
    if (fabs(f - 0.1) < 1e-9)
        printf("True");
    else
        printf("False");
}

内容的提问来源于stack exchange,提问作者محمود خالد

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:29:56