除法的结果总是零

22

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

请参见https://dev59.com/HUnSa4cB1Zd3GeqPRdfs#1580344。 - GManNickG
lol - 在C语言中进行整数除法也是我遇到的第一个难题。那时还没有堆栈溢出,只有一个毫无幽默感的教授。 - Shane C. Mason
4个回答

31

因为在这个表达式中

t = (1/100) * d;

1和100是整数值,整数除法会截断小数部分,因此这与下面的表达式相同

t = (0) * d;

您需要将其转换为浮点常量,如下所示:

t = (1.0/100.0) * d;

你可能也想对此进行相同的操作

k = n / 3.0;

10
可以使用d / 100.0 - Joey
在我的情况下,为了避免除数为0,我最终采取的方法是:Double ratio = (Convert.ToDouble(x) / Convert.ToDouble(y)); - Christopher
1
@ChristopherD.Emerson 这是关于 C# 的问题;而这个问题是关于 C(也适用于 C++)的。 - TamaMcGlinn

0

你正在使用整数除法,而在整数除法中,1/100 总是会向下舍入为零。

如果你想要进行浮点数除法并简单地截断结果,你可以确保使用浮点数字面量,d 将会被隐式转换:

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

0

我认为这是因为

t = (1/100) * d;

整数除法 1/100 的结果为 0

因此,0 * d 总是等于 0

如果你使用 1.0/100.0 的形式,则会得到正确的结果。


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

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

t=(1%100)*d 

并将其添加到0中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接