“==”运算符似乎不适用于浮点数

"==" operator seeems not to work for floating point numbers

有人可以解释这里的输出吗?

#include <stdio.h>

int main(void) {
    float f = 0.1 ;
    printf ("%f\n",f ) ;
    if (f == 0.100000) {
        printf ("true ") ;
    }
    else {
        printf ("False") ;
    }
    return 0;
}

输出:

0.100000
False

0.100000默认是double,试试0.100000f。如果需要与 double 进行比较,则需要尝试 here.

中描述的内容

float 和 double 类型的对象以不同的精度存储。

你应该写

 if (f == 0.100000f) {

正在尝试比较两个浮点数。

另外最好用一个float类型的常量来初始化变量f

float f = 0.1f;

您正在尝试将 float 数字与 double 进行比较。数字 0.100000 被视为 double 类型,除非您用尾随 f 指定它是 float. 因此:

int main(){
    float x = 0.100000;
    if (x == 0.100000)
        printf("NO");
    else if (x == 0.100000f)
        // THE CODE GOES HERE
        printf("YES");
    else
        printf("NO");
}

您可以参考 single precision and double precision 了解理论细节