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
相关产品推荐
相关产品推荐

