2010-02-27 97 views
15

我得到了這個C代碼。除法結果始終爲零

#include <stdio.h> 

int main(void) 
{ 
     int n, d, i; 
     double t=0, k; 
     scanf("%d %d", &n, &d); 
     t = (1/100) * d; 
     k = n/3; 
     printf("%.2lf\t%.2lf\n", t, k); 
     return 0; 
} 

我想知道爲什麼變量't'總是爲零(在printf函數中)?

+0

另請參見http://stackoverflow.com/questions/1580332/stdpow-gives-a-wrong-approximation-for-fractional-exponents/1580344 – GManNickG 2010-02-27 01:41:00

+0

大聲笑 - 整數除法在C是我的第一個頭抓手了。沒有堆疊流動然後 - 只是一個幽默的教授 – 2010-02-27 01:42:18

回答

23

t = (1/100) * d; 

1和100是整數值,整數除法截短,所以這這是相同的,因爲這

t = (0) * d; 

,你需要做的是這樣的

t = (1.0/100.0) * d; 

一個浮點常量,你可能還需要做同樣與此

k = n/3.0; 
+9

或只是使用'd/100.0'。 – Joey 2010-02-27 01:42:07

0

您正在使用整數除法,並且1/100將始終以整數除法舍入爲零。

如果你想要做浮點除法和簡單截斷結果,可以確保您使用的是浮動指針文字,而是和d將被隱式轉換爲你:因爲在此表達

t = (int)((1.0/100.0) * d); 
0

我認爲它是因爲

t = (1/100) * d; 

1/100作爲整數除法= 0

然後0 * d總是s等於0

,如果你做1.0/100.0我認爲這將正常工作

-2
t = (1/100) * d; 

,就是始終等於0,你可以做到這一點

t=(1%100)*d 

,並把它添加到0

+0

歡迎來到Stack Overflow。如果你決定用已經確定和正確的答案來回答一個較老的問題,那麼在當天晚些時候添加一個新的答案可能不會讓你有任何信用。如果你有一些與衆不同的新信息,或者你確信其他答案都是錯誤的,通過一切手段添加一個新答案,但是在問題提出六年半之後給出相同基本信息的「另一個答案」你不會贏得很多信用。 – 2017-06-21 00:04:41