为什么if(a == 2.3)在浮动a = 2.3时评估为假

Har*_*iom 4 c

#include<stdio.h>

void main()
{
    float a = 2.3;
    if(a == 2.3) {
        pritnf("hello");
    }
    else {
        printf("hi");
    }
}
Run Code Online (Sandbox Code Playgroud)

它在输出中打印"hi",或者我们可以说如果条件得到假值.

#include<stdio.h>

void main()
{
    float a = 2.5;
    if(a == 2.5)
        printf("Hello");
    else
        printf("Hi");
}
Run Code Online (Sandbox Code Playgroud)

打印你好.

Ker*_* SB 12

变量a是一个float接近数学值2.3的值.

文字2.3也是一个double接近数学值2.3的值,但因为它double具有更高的精度float,所以这可能是与值不同的值a.二者floatdouble只能代表值的有限数,所以有不能精确通过任一这两种类型来表示一定的数学实数.

在比较中a == 2.3,左操作数从提升floatdouble.此促销是准确的并保留价值(如所有促销所做的那样),但如上所述,该值可能与2.3文字的值不同.

要在浮点数之间进行比较,可以使用适当的浮点字面值:

assert(a == 2.3f);
//             ^
Run Code Online (Sandbox Code Playgroud)

  • 或者更确切地说......不要将`==`用于浮点值. (3认同)