2010-02-27 96 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