为何这段C语言代码输出False而非True?
为什么这段C语言代码输出False而不是True?
问题出在浮点数的类型与精度差异上:
- 代码里的
0.1字面量默认是double类型(双精度浮点数),将它赋值给float类型变量f时,会被截断为单精度浮点数,这个过程会损失部分精度。 - 执行
if (f == 0.1)时,float类型的f会被隐式转换回double类型,但转换后的数值和原本的double类型0.1已不完全相等,因此比较结果为假,输出False。
解决方法
- 将字面量指定为
float类型(加f后缀):
#include <stdio.h> int main() { float f = 0.1f; if (f == 0.1f) printf("True"); else printf("False"); }
- 使用
double类型变量匹配字面量类型:
#include <stdio.h> int main() { double f = 0.1; if (f == 0.1) printf("True"); else printf("False"); }
- 实际开发中更稳妥的方式:不要直接用
==比较浮点数,而是判断两个数的差值是否小于一个极小的阈值(比如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,提问作者محمود خالد
相关产品推荐
相关产品推荐

