【问题标题】:"==" operator seeems not to work for floating point numbers [duplicate]“==”运算符似乎不适用于浮点数[重复]
【发布时间】:2022-01-11 13:37:19
【问题描述】:

有人可以在这里解释一下输出吗?

#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

【问题讨论】:

标签: c if-statement floating-point comparison-operators


【解决方案1】:

您正在尝试将float 号码与double 进行比较。数字 0.100000 被视为 doubletype 除非您在结尾处指定 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 precisiondouble precision

【讨论】:

    【解决方案2】:

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

    你应该写

     if (f == 0.100000f) {
    

    试图比较两个浮点数。

    另外,最好用浮点类型的常量初始化变量 f

    float f = 0.1f;
    

    【讨论】:

      【解决方案3】:

      0.100000 默认是双精度,试试0.100000f。如果您需要与 double 进行比较,则需要尝试 here 描述的内容。

      【讨论】:

        猜你喜欢
        • 2013-11-30
        • 1970-01-01
        • 2014-10-10
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 2013-12-18
        相关资源
        最近更新 更多