Convertir int pour flotter

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.