C++的整數判別

要怎樣才可以辨別整數

用什麼指令

我剛剛懂 isdigit

但他不能符合我的需求

請大大幫幫忙~!!

1 Answer

Rating
  • ?
    Lv 5
    1 decade ago
    Favorite Answer

    一招簡單又快、C / C++ 通用的方法:

    if (a == (int) a)

    //是整數

    else

    // 不是整數

    2008-03-19 03:06:46 補充:

    不過,要注意浮點數(電腦常用的小數)有兩個問題:

    1. 它和人類慣用的 10進小數並不是一對一!

     也因此有了基本誤差(那是轉換成10進位造成的。)

    2. 浮點數本身位數有限(簡言之:double 約 16位,float 約 6位)

     所以,計算上會誤差!

    下面的程式,讓你了解一下上述問題。

    #include

    int main (void)

    { double a, b;

    for (b=1e-15; b>=1e-16; b-=5.01e-17)

    { a = 3. - b;

    2008-03-19 03:07:13 補充:

    if (a == (int) a)

    printf("%21.19f Int\t%20.18f\n", b, a);

    else

    printf("%21.19f Float\t%20.18f\n", b, a);

    }

    system("pause");

    return 0;

    }

    2.99...9100 看到 b 有數值,

    但 a= 3. -b 時,那些數值已算不進 a 裡!

    因為,double 才約 16位!

    2008-03-19 03:08:18 補充:

    忘了說:上面 2.99...9100 .... 是執行結果!

    請對著執行結果看這段說明。

    2.99...910 就跳 299...960 再跳 3.00...000

    看到 a = 3. - 0.0...1984... = 2.9999999999999998015...,a 不是整數!

    但因 98 的 8 已是第 17位,double 已經罩不住了!

    所以,2.99...98015... 就是 3.00了!

    所以,要記得:在電腦裡,沒有 100% 的整數判別法!

    除非,你用 Symbolic Calculation,它有可能辦得到!但,很慢!

Still have questions? Get your answers by asking now.