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

あなたのリテラルは double であり、代入で float にキャストされます。

試す:

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 に答える