可能重复:
strange output in comparision of float with float literal为什么在'if'条件下浮点值条件失败?
下面是代码
#include<stdio.h>
int main()
{
float a=0.3;
if(a==0.3)
printf("Hello World!");
else
printf("Stack Overflow");
return 0;
}
我的预期输出的 “Hello World”。但是我得到了“堆栈溢出”。为什么我没有得到“Hello World”?
if条件有问题吗?
没有做过'C'但我想这应该是浮'一== 0.3f'; –
在这种情况下,'a'被提升为'double',因为'0.3'是一个双字面值。由于'0.3'不能完全表示,所以比较失败。 –
大卫说:“(double)(float)(0.3)'不等于'0.3',因为前者在整个过程中四舍五入为精确的,而后者保留了double精度。以10为底的比喻,假设我拿'1/3'代表3位有效数字:'0.333'。这就是“浮动”a“。现在将“a”的值转换为有效数字为6的值(“double”):“0.333000”。这不等于'0.333333'(三分之一的值为“双倍”)。 –