当我运行下面的代码时,我得到以下输出:
输出:if
为什么会这样?
#include <stdio.h>
void main()
{
float a = 0.7;
if(a<0.7)
{
printf("if");
}
else
{
printf("Else");
}
}
答案 0 :(得分:3)
您的程序会比较double
0.7
的{{1}}表示形式(这是编译器在您的程序中编写0.7
时产生的)float
表示{{1} (变量0.7
包含的变量)。两者不一样,只是a
一个略大。
编辑:double
可以用十六进制表示法紧凑表示。它是(float)0.7
。 0x1.666666p-1
0.7
常量为double
,因此 稍大。
答案 1 :(得分:2)
浮点数不会以精确格式存储。最有可能的是,您的平台解释
float a = 0.7;
作为
float a = 0.69999....;
这是因为平台上浮点的内部表示。丹尼尔提供的link应该让你开始。
答案 2 :(得分:0)
这是由于计算机上浮点表示的准确性问题。请参阅this Wikipedia article。