web-dev-qa-db-fra.com

pourcentage de deux int?

Je veux obtenir deux entiers, l'un divisé par l'autre pour obtenir une décimale ou un pourcentage. Comment puis-je obtenir un pourcentage ou une décimale de ces deux ints? (Je ne sais pas si c'est vrai. Je suis probablement loin…) par exemple:

int correct = 25;
int questionNum = 100;
float percent = correct/questionNum *100;

C’est ainsi que j’ai pensé pouvoir le faire, mais cela n’a pas fonctionné ... Je veux convertir la décimale (s’il en existe une) en pourcentage sur 100; par exemple, dans ce cas, il s’agit de 25%. des idées quelqu'un?

Voici le code correct (merci à Salvatore Previti!):

float correct = 25;
float questionNum = 100;
float percent = (correct * 100.0f) / questionNum;

(d'ailleurs, je fais un projet en utilisant cela pour un programme de vérification de quiz, c'est pourquoi j'ai besoin du pourcentage ou du nombre décimal)

50
Baruch

Si vous n'ajoutez pas .0f il sera traité comme s'il s'agissait d'un entier et une division entière est très différente d'une division à virgule flottante :)

float percent = (n * 100.0f) / v;

Si vous avez besoin d'un entier, vous pouvez bien sûr convertir le float ou le double en entier.

int percent = (int)((n * 100.0f) / v);

Si vous savez que votre valeur n est inférieure à 21474836 (c'est-à-dire (2 ^ 31/100)), vous pouvez tout faire à l'aide d'opérations entières.

int percent = (n * 100) / v;

Si vous obtenez NaN, c’est parce que, quoi que vous fassiez, vous ne pouvez pas diviser pour zéro bien sûr… cela n’a aucun sens.

79
Salvatore Previti

Deux options:

Faites la division après la multiplication:

int n = 25;
int v = 100;
int percent = n * 100 / v;

Convertir un int en un float avant de se diviser

int n = 25;
int v = 100;
float percent = n * 100f / v;
//Or:
//  float percent = (float) n * 100 / v;
//  float percent = n * 100 / (float) v;
16
Eric

L'un d'entre eux doit être un flotteur entrant. Une façon possible de garantir cela est:

float percent = (float) n/v * 100;

Sinon, vous faites division entière, qui tronque les nombres . En outre, vous devriez utiliser double sauf s’il existe une bonne raison pour utiliser float.

Le prochain problème que vous rencontrerez est que certains de vos pourcentages pourraient ressembler à 24,9999999999999% au lieu de 25%. Ceci est dû à la perte de précision dans la représentation en virgule flottante. Vous devrez aussi décider comment gérer cela. Les options incluent un DecimalFormat pour "corriger" le formatage ou BigDecimal pour représenter les valeurs exactes.

3
Ryan Stewart

Bien pour faire la virgule décimale dans un pour cent, vous pouvez le faire,

float percentage = (correct * 100.0f) / questionNum;
0
Shiva
float percent = (n / (v * 1.0f)) *100
0
Francisco Spaeth