C語言 除法計算 陷阱

C語言在做除法的時候需要特別注意型別的問題

因除法的結果往往會有小數存在,故應使用float型別處理

例如當某段敘述句如下

unsigned int a, b;

float div;

div = (a/(b*64))*1000;

假設a=1000, b=4, 則div=?

div = (1000/(4*64))*1000;

因a與b均為unsigned int型別

故div會得3000

因4*64=256, 但因1000/256之後是整數型別的關係

故只會得3*1000後只有3000

需將敘述句改為如下

unsigned int a, b;

float div;

div = ((float) a/((float) b*64))*1000;

才能得到正確的結果div = 3906.25

在運算的時候因為必須考慮到小數點的部分

故在執行除法運算的時候,

需將unsigned int型別強制轉換為float型別

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料