为什么这个程序不打印值 2 ..我想要的输出是 2 ..这里的错误在哪里

Why this programme doesn't print the value 2 .. My desire output is 2.. where is the error here

示例代码在这里,期望输出是2 ::

#include <stdio.h>

int main()
{
    double i, a, b;
    int j;
    for (i = 0; i <= 3; i = i + .20)
    {

        if (i == 2)
        {
            printf("I=%lf\n", i);
        }
    }
}

当我使用

#include <stdio.h>

int main()
{
    double i, a, b;
    int j;
    for (i = 0; i <= 3; i = i + .25)
    {

        if (i == 2)
        {
            printf("I=%lf\n", i);
        }
    }
}

有效;但在第一种情况下,它不起作用。为什么 ??

简短的回答是,在 for 循环中使用浮动控制变量是不明智的...比较浮动值是否相等更不明智。

由于浮点数存储为尾数和指数,您的0.20000000很可能是0.199999999...9020000000...01因此比较失败。

通常,0.252.000 将准确存储,因为它们是 2 的幂。因此 0.25 的步骤按预期工作。

MISRA C:2012 有规则 14.1 来防止使用 floatdoubles 作为循环计数器...并且之前有一个规则来防止测试 float/ double 平等 - 也许我们应该恢复该规则。