C # Bug ou Quelque chose ne va pas

J’ai un problème avec C # qui ne calcule pas correctement pour dessiner ma barre de progression.

int width = 130; int maxValue = 20; int value = 20; int percent = (width / maxValue) * value 

Maintenant, il devrait retourner 130, cela signifie donc que ma barre de progression est pleine, mais 120, donc je ne sais pas ce qui se passe.

voici et image de la barre de progression http://imgur.com/sUbshxk

J’ai également testé la formule avec VB.NET et cela a fonctionné parfaitement.

J’utilise VS2013 dans Windows 7 x86.

130 / 20 effectue une division entière

De / Opérateur (référence C #)

Lorsque vous divisez deux entiers, le résultat est toujours un entier. Par exemple, le résultat de 7/3 est 2

C’est pourquoi il rejette toujours la partie décimale et renvoie 6 . C’est pourquoi votre résultat sera 6 * 20 ce qui correspond à 120 .

En guise de solution, vous pouvez changer votre division entière en division en virgule flottante .

Par exemple;

 var percent = (130.0 / 20) * 20; var percent = (130 / 20.0) * 20; 

Cela signifie que vous devez définir une variable de votre variable comme un double ou en atsortingbuer une à double dans votre calcul.

Vous devez définir les valeurs à doubler:

 int percent = (int)(((double)width / (double)maxValue) * (double)value); 

130 / 20 = 6.5 et il sera implicitement converti en integer ce qui en fait 6 . Donc, la mauvaise valeur est utilisée pour la multiplication suivante

Puisque vous divisez deux variables int , vous effectuez une division entière. 130/20 est 6.5, ce qui, dans le contexte entier, est tronqué à 6. Il est ensuite multiplié par 20 pour générer le résultat de 120.

Vous pouvez éviter ce problème complètement en définissant vos variables comme étant des double :

 double width = 130; double maxValue = 20; double value = 20; double percent = (width / maxValue) * value; 

Dans la plupart des langages de programmation, la division d’un entier par un entier donne toujours un entier.

Si vous ne voulez pas un résultat entier, assurez-vous qu’au moins un des opérandes est un float ou un double:

 int width = 130; float maxValue = 20.0; int value = 20; int percent = (width / maxValue) * value