web-dev-qa-db-fra.com

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 d’obtenir 0,00 comme réponse et j’ai essayé de nombreux changements, mais sans succès.

15
Jack

La division entière est tronquée, donc (50/100) a pour résultat 0. Vous pouvez transtyper en float (meilleur double) ou multiplier par 100.0 (pour la précision double, 100.0f pour la 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 de (double)number/total * 100 peuvent être légèrement différents (il en va de même pour float), mais il est extrêmement peu probable que les deux premières positions après la virgule soient influencées. tu choisis.

24
Daniel Fischer

la division entière en C tronque le résultat pour que 50/100 vous donne 0

Si vous voulez obtenir le résultat souhaité, essayez ceci:

((float)number/total)*100

ou 

50.0/100
5
Omkant

Non, parce que vous utilisez l'expression avec des entiers, vous divisez donc le entier 50 par le entier 100, ce qui donne le entier 0. Tapez l'un d'eux en float devrait marcher.

2

Je multiplie régulièrement par 1,0 si je veux virgule flottante, c'est plus facile que de se souvenir des règles.

1
Alan Corey

Vous faites de l'arithmétique entière, donc le résultat est correct. Essayer

percentage=((double)number/total)*100;

En passant, le %f s'attend à une double et non à une float. Par pure chance, c'est converti ici, donc ça marche bien. Mais en général, vous utiliseriez généralement double comme type à virgule flottante en C de nos jours.

1
Jens Gustedt

Changez votre code pour:

int total=0, number=0;
float percentage=0.0f;

percentage=((float)number/total)*100f;
printf("%.2f", (double)percentage);
0
Lundin

Cela peut vous donner la bonne réponse

#include <stdio.h>
int main()
{
    float total=100, number=50;
    float percentage;
    percentage=(number/total)*100;
    printf("%0.2f",percentage);
    return 0;
}
0
Arumugam Maharaja

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

0
ALOToverflow