除法结果始终为零

时间:2010-02-27 01:37:11

标签: c double division multiplication integer-division

我有这个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函数中)?

4 个答案:

答案 0 :(得分:25)

因为在这个表达式中

t = (1/100) * d;

1和100是整数值,整数除法截断,所以这与此

相同
t = (0) * d;

你需要像这样做一个浮点常数

t = (1.0/100.0) * d;

您可能也想对此

做同样的事情
k = n / 3.0;

答案 1 :(得分:0)

您正在使用整数除法,并且1/100总是在整数除法中向下舍入为零。

如果你想进行浮点除法并简单地截断结果,你可以确保使用浮点指针文字,而d将为你隐式转换:

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

答案 2 :(得分:0)

我认为是因为

t = (1/100) * d;

1/100作为整数除法= 0

然后0 * d总是等于0

如果你做1.0 / 100.0,我认为它会正常工作

答案 3 :(得分:-2)

t = (1/100) * d; 

总是等于0,你可以这样做

t=(1%100)*d 

并将其添加到0