int total=0, number=0; float percentage=0.0; percentage=(number/total)*100; printf("%.2f",percentage);
Si la valeur du nombre est 50 et le total est 100, je devrais obtenir 50,00 pour cent, du moins c’est ce que je veux. mais je continue à obtenir 0,00 comme réponse et j’ai essayé de nombreux changements de types aussi mais sans succès.
La division entière est tronquée, donc (50/100)
résultat est 0. Vous pouvez 100.0f
par 100.0f
sur float
(meilleur double
) ou multiplier par 100.0
(pour une double
précision, 100.0f
pour une précision float
) en premier,
double percentage; // ... percentage = 100.0*number/total; // percentage = (double)number/total * 100;
ou
float percentage; // ... percentage = (float)number/total * 100; // percentage = 100.0f*number/total;
Etant donné que l’arithmétique en virgule flottante n’est pas associative, les résultats de 100.0*number/total
et (double)number/total * 100
peuvent être légèrement différents (la même chose est valable pour float
), mais il est extrêmement peu probable que les deux premières positions après la décimale soient influencées. point, donc peu importe la façon dont vous choisissez.
division entière en C tronque le résultat, donc 50/100
vous donnera 0
Si vous voulez obtenir le résultat souhaité, essayez ceci:
((float)number/total)*100
ou
50.0/100
Non, parce que vous utilisez l’expression en tant qu’entiers, vous divisez donc l’ entier 50 par l’ entier 100, ce qui donne l’ entier 0. Transformez l’un d’eux en float
et cela devrait fonctionner.
Vous faites de l’arithmétique entière, donc le résultat est correct. Essayer
percentage=((double)number/total)*100;
BTW le %f
attend un double
pas un float
. Par pure chance, c’est converti ici, donc ça marche bien. Mais en général, vous utiliseriez principalement le double
comme type à virgule flottante en C de nos jours.
Cela devrait vous donner le résultat que vous voulez.
double total = 0; int number = 0; float percentage = number / total * 100 printf("%.2f",percentage);
Notez que le premier opérande est un double
Changez votre code pour:
int total=0, number=0; float percentage=0.0f; percentage=((float)number/total)*100f; printf("%.2f", (double)percentage);
Je multiplie régulièrement par 1,0 si je veux virgule flottante, c’est plus facile que de se souvenir des règles.