天天看點

兩個int資料的運算輸出float類型的問題

一個簡單的問題當我對兩個int類型做除法(/)時,想輸出一個相對精确的浮點數float類型的資料,于是一開始我用了這樣的算法

int a=10;
int b=15;
float c=float(a/b);
cout<<c;
           

程式可以正常編譯,但是結果卻是0!

于是仔細看了看書,發現C++在進行運算時是這樣工作的:

  1. 對于兩個同類型的,如float與float做除法運算。計算結果是float格式的
  2. 對于兩個不同類型的,如int與float做除法運算。C++會把其中位數比較低的資料拉高。讓int資料變成float資料再做運算。

    這樣就可以解釋為什麼上述代碼不能輸出float類型的資料:因為a/b是兩個int類型,是以他們做除法後也是int類型(也就代表結果是0)。這時我再給0改變資料類型為float是沒有意義的!

    思考之後把代碼改成了如下形式:

int a=10;
int b=15;
float c=float(a)/b;
cout<<c;
           

這樣我就把a的資料類型強行改成了float,于是在做除法時,b的資料類型也被拉高,就可以得到期待的結果了。

書中也提出了其他的方法,不過我覺得這種方法很實用,有興趣可以看《C++Primer Plus》第六版的62頁。

繼續閱讀