4
int main()
{
    float lfResult = 19.893196;
    if(lfResult == 19.893196)
        printf("Works");
    else
        printf("does not work");

    getch();
    return 0;
}

输出:不起作用

为什么if条件失败?

4

3 回答 3

8

在 C 中,浮动常量的类型为double. 尝试:

float lfResult = 19.893196f;
if(lfResult == 19.893196f)
                        ^

因此常数19.893196比 具有更高的精度lfResult

6.4.4.2 - 4

无后缀的浮点常量具有 double 类型。如果以字母 f 或 F 为后缀,则它的类型为 float。如果以字母 l 或 L 为后缀,则它的类型为 long double。

于 2012-08-08T07:12:48.503 回答
1

你的文字是双精度的,在赋值中被转换为浮点数。

尝试:

if(lfResult == 19.893196F)
  ...
于 2012-08-08T07:14:06.980 回答
0

在 if 条件下,19.893196 可以作为 double。所以 if 条件失败。

您应该尝试以下方式。

if(lfResult == 19.893196f)

我想这会对你有所帮助。

于 2012-08-08T07:19:42.540 回答