C言語浮動小数点数と0値の比較

644 ワード

#include 

int main()
{
    double tmp = 0.3;
    printf("%d
", (int)(tmp*10) ); return 0; }

上記のプログラムの結果、私が飛び出したのは2です.明らかに欲しい結果と合わない.
 
理由は、floatタイプでもdoubleタイプの変数でも精度に制限があるため、tmpは0.2999999の可能性があるため、修正値を追加する必要があります.
printf("%d", (int)( (tmp+0.00001)*10) );
 
floatを0と比較する必要がある場合は、次の手順に従います.
#include 

int main()
{
    double tmp = 0.0;
    if(tmp>0-0.000001 && tmp<0+0.000001)
        printf("tmp == 0
"); else printf("tmp != 0
"); return 0; }