相同的浮点值比较为不等

VGu*_*pta 2 c floating-point

我正在研究C中的一些"确定输出"问题.我遇到了这个看起来很简单的问题,但在运行代码后让我感到困惑.

我预期的输出是"真".但是在跑步时,它是"假的".当我使用printf()检查f的值时,它显示为0.1.有人可以解释一下为什么f被赋予0.1对于IF语句不会返回true?

从我选择问题的地方找不到答案,我自己也找不到答案.

#include <stdio.h>

int main()
{
    float f = 0.1;
    if (f == 0.1)
        printf("True");
    else
        printf("False");
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 9

问题是f定义为具有float浮点常量0.1类型的变量具有类型double.类型double比类型更精确float.它有更多的二进制数字来表示分数.所以在这个声明中

        float f = 0.1;
Run Code Online (Sandbox Code Playgroud)

有一个截断.

为了得到预期的结果,你至少应该写

        if (f == 0.1f)
Run Code Online (Sandbox Code Playgroud)

此外,为了确保没有舍入代码应该看起来像

#include <stdio.h>

int main( void )
{
    float f = 0.1f;

    if ( f == 0.1f )
        printf("True\n");
    else
        printf("False\n");
}
Run Code Online (Sandbox Code Playgroud)