浮点值比较失败

dee*_*pak 3 c c++

在C中,如果我们执行以下代码:

float a = 0.7;
if (a < 0.7)
{
    printf("Less");
}
else
{
    printf("no");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码打印"Less".

但是如果我们执行以下代码:

float a = 1.7;
if (a < 1.7)
{
    printf("Less");
}
else
{
    printf("no");
} 
Run Code Online (Sandbox Code Playgroud)

它打印"不".

这是什么原因?float数据类型如何工作?

Pet*_*der 11

问题是,这a是一个float,但是0.7double.分配的值a从转换doublefloat,这会失去精度.当你比较adouble,a扩大到一double,但精度已经丧失,他们可能不再是相等的.

如果更改0.71.70.7f1.7f那么他们将被转换为float文字,并可靠地比较等于a在这两种情况下.