web-dev-qa-db-fra.com

Obtenez le pourcentage du nombre en c ++

Comment puis-je calculer plusieurs pour cent de int?
Par exemple, je veux obtenir 30% du nombre, si j'utilise cet exemple de code, j'aurai une mauvaise réponse: 

int number = 250;
int result = (number / 100) * 30;  

le résultat sera 60, et la vraie réponse est 75, existe-t-il un moyen de le calculer?

8
user1544067

Multiplier avant de diviser:

int result = number * 30 / 100;

Vous obtenez ce résultat parce que la division avec les types entiers produit un résultat entier: 250/100 est égal à 2. Si vous multipliez avant la division, vous obtenez toujours un résultat entier, mais au moins vous n'avez pas perdu de données dans les étapes intermédiaires. Si vous devez gérer des nombres vraiment énormes, il y a un risque de déborder de la plage autorisée par int cependant.

Vous pouvez également utiliser l'arithmétique en virgule flottante, où la division peut produire des fractions d'entiers:

int result = number * 0.30;

Cependant, cela peut produire des résultats inattendus , il est donc préférable d’utiliser des entiers comme ci-dessus. Ou écrivez 3.0/10 au lieu de 0.30.

15
Joni

Changer d'opérande (comme suggéré par d'autres) fonctionnerait aussi, mais si vous ne le souhaitez pas, il existe une autre solution:

int number = 250;
int result = static_cast<double>(number) / 100 * 30; 
2
Sceptical Jule

En supposant que les chiffres sont petits (ish), vous pouvez simplement le retourner:

 int result = (number * 30) / 100;

(La parenthèse n'est pas obligatoire, mais aide à clarifier). 

Cela ne fonctionnera pas si l'un des chiffres est plusieurs millions, mais devrait être bon pour des nombres plus petits que cela. 

2
Mats Petersson

Essaye ça,

int number = 250;
float result = number  * (float)(30/100.0);
1
CodeCrusader

Utilisez float:

float number = 250;
float result = (number / 100.0) * 30

De plus, le fait de placer le point 100.0 avec le point déciaml pourrait suffire.

Parce que si vous le faites à votre façon, 250/100 en nombre entier est égal à 20 (vous pouvez mettre 100 en 200 seulement deux fois et le nombre entier ne s’inquiète pas des 50 restants) et 30 fois = 60. 

0
Ms. Nobody

Maintenant, je pense à une solution: 

int number = 250;
int result = number * 100;
result = (result / 100) * 30;
result /= 100;
0
user1544067

score/items * 30 ex;

15%

int score, items;
cout<<"input your score"<< score<<endl;
cin>>score;
cout<<"input number of items"<<items<<endl;
cin>>items;
float total=score/items*15
cout<<"you got "<<total<<""<<endl;
0
marvin orsua

L'ensemble du programme est comme:

double number , result;

cout << "Enter the number:";
cin >> number;

result = number * 30.0 / 100;
cout << "Result = " << result << endl;

et vous aurez votre réponse ....

0
user3506720

Vous devez effectuer des calculs en virgule flottante, sinon le compilateur effectue ici toute l'arithmétique sous forme d'entiers.

Vous pourriez essayer

int result = (number / 100.0) * 30;
0
Emil Sit