web-dev-qa-db-fra.com

C # arrondit les divisions par lui-même

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?

32
ONOZ

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.

44
rsbarro

200/3 est une division entière, résultant en un entier.

essayez 200.0/3.0

6
John Boker

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"));
5
Petar Ivanov

200 / 3 c'est une division entière. Passez à: 200.0 / 3 pour en faire une division en virgule flottante.

4
ybungalobill

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.

3
JoshuaRogers

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?

3
sclarson

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.

2
Chad

Essaye ça

i = 200d/3d;

et il ne s'arrondira pas.

1
Bala R

200 et 3 sont tous deux des entiers, donc le résultat sera un entier. Convertissez l'un d'eux en décimal.

0
Mike M.