résultat de la division est toujours égale à zéro [dupliquer]
-
23-09-2019 - |
Question
Cette question a déjà une réponse ici:
Je suis arrivé ce code 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;
}
Je veux savoir pourquoi ma variable 't' est toujours égale à zéro (dans la fonction printf)?
La solution
parce que dans cette expression
t = (1/100) * d;
1 et 100 sont des valeurs entières, tronque de division de nombre entier, de sorte que cela, il est le même que celui
t = (0) * d;
vous avez besoin d'en faire une constante de flotteur comme celui-ci
t = (1.0/100.0) * d;
vous pouvez également faire la même chose avec cette
k = n / 3.0;
Autres conseils
Vous utilisez la division entière, et va toujours 1/100 pour arrondir à zéro dans la division entière.
Si vous voulez faire la division à virgule flottante et tronque simplement le résultat, vous pouvez vous assurer que vous utilisez pointeur flottant littéraux à la place, et d seront convertis implicitement pour vous:
t = (int)((1.0 / 100.0) * d);
Je pense que à cause de
t = (1/100) * d;
1/100 comme division entière = 0
0 alors * d est toujours égale à 0
si vous faites 1,0 / 100,0 je pense que ce sera correctement
t = (1/100) * d;
C'est égal à toujours 0, vous pouvez le faire
t=(1%100)*d
et l'ajouter à 0