Результат разделения всегда равен нулю

Я получил этот код.

#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)?

Ответы

Ответ 1

потому что в этом выражении

t = (1/100) * d;

1 и 100 - целые значения, усечения целых делений, так что это то же, что и этот

t = (0) * d;

вам нужно сделать так, чтобы константа с плавающей точкой

t = (1.0/100.0) * d;

вы также можете сделать то же самое с этим

k = n / 3.0;

Ответ 2

Вы используете целочисленное деление, а 1/100 всегда округляется до нуля в целых делениях.

Если вы хотите сделать деление с плавающей запятой и просто обрезать результат, вы можете убедиться, что вместо этого используете литеры с плавающим указателем, и d будет неявно преобразован для вас:

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

Ответ 3

Я думаю, что из-за

t = (1/100) * d;

1/100 как целое деление = 0

то 0 * d всегда равно 0

если вы делаете 1.0/100.0, я думаю, что он будет работать правильно

Ответ 4

t = (1/100) * d; 

Это всегда равно 0, вы можете сделать это

t=(1%100)*d 

и добавьте его к 0