Quand je fais une division en C #, ça s'arrondit automatiquement. Voir cet exemple:
double i;
i = 200 / 3;
Messagebox.Show(i.ToString());
Cela me montre une boîte de message contenant "66". 200/3 est en fait 66,66666 ~ cependant.
Existe-t-il un moyen d'éviter cet arrondi et de conserver un nombre comme 66,6666667?
i = 200 / 3
Effectue une division entière.
Essayez soit:
i = (double)200 / 3
ou
i = 200.0 / 3
ou
i = 200d / 3
Déclarer l'une des constantes comme double entraînera l'utilisation de l'opérateur de double division.
200/3 est une division entière, résultant en un entier.
essayez 200.0/3.0
Vous pouvez spécifier une chaîne de format avec le nombre de décimales souhaité:
double i;
i = 200 / 3.0;
Messagebox.Show(i.ToString("F6"));
200 / 3
c'est une division entière. Passez à: 200.0 / 3
pour en faire une division en virgule flottante.
Bien que la réponse soit en fait 66,666, ce qui se passe, c'est que 200/3 est calculé, ce qui donne un entier. L'entier est alors placé dans le flotteur. Les mathématiques elles-mêmes se produisent sous forme de mathématiques entières. Pour en faire un flottant, utilisez 200.0/3. Le .0 le fera traiter 200 comme un flottant, ce qui entraînera des calculs en virgule flottante.
Mis à part le double vs int qui se passe dans cette action, vous pensez au double comme une unité précise. Essayez d'utiliser le type de données décimal lorsque vous vous souciez vraiment de la précision.
Plus d'informations à cette réponse: décimal vs double! - Lequel dois-je utiliser et quand?
double i = 200,0/3;
double i = ((double) 200)/3;
Ce qui se passe, c'est que les deux entiers effectuent une division entière, puis la réponse entière est affectée au flottant. Pour éviter cela, jetez toujours l'un des nombres en double.
Essaye ça
i = 200d/3d;
et il ne s'arrondira pas.
200 et 3 sont tous deux des entiers, donc le résultat sera un entier. Convertissez l'un d'eux en décimal.