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?
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
.
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;
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.
Essaye ça,
int number = 250;
float result = number * (float)(30/100.0);
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.
Maintenant, je pense à une solution:
int number = 250;
int result = number * 100;
result = (result / 100) * 30;
result /= 100;
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;
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 ....
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;