134 votes

Pourquoi ne puis-je pas retourner un double de deux pouces divisés

Relativement nouveau pour le codage et avoir un problème concernant la division de base. Comment faire pour suivre ne renvoie pas la réponse, je pensais que ce serait:

 int a=7;
int b=3;
double c=0;
c=a/b;
 

J'aurais mis de l'argent sur le résultat étant 2.3333, cependant il ne retourne que 2. Si A et B sont ensuite réaffectés à un double, la réponse passe à 2.333. Mais sûrement parce que C est déjà un double, ça aurait dû marcher?

Comment se fait-il que int / int = double ne fonctionne pas? Peut-être une question étrange, mais elle me laisse perplexe.

192voto

Chad La Guardia Points 1889

En effet, vous utilisez la version de division entière de operator/ , qui prend 2 int s et renvoie un int . Pour utiliser la version double qui renvoie un double , au moins l’un des int s doit être explicitement converti en double .

 c = a/(double)b;
 

15voto

nplatis Points 270

Ici, il est:

a) la Division de deux ints effectue une division entière toujours. Donc, le résultat de l' a/b dans votre cas ne peut être qu'un int.

Si vous souhaitez conserver a et b comme ints, encore diviser pleinement, vous devez jeter au moins l'un d'entre eux à double: (double)a/b ou a/(double)b ou (double)a/(double)b.

b) c est double, de sorte qu'il peut accepter un int de la valeur sur l'adéquation de l' int est automatiquement convertie double et affectée à l' c.

c) n'oubliez pas que sur l'adéquation, l'expression à droite de l' = est calculé d'abord (selon la règle (a) ci-dessus, et sans tenir compte de la variable à gauche de l' =) et ensuite affecté à la variable à gauche de l' = (selon (b) ci-dessus). Je crois que cela complète le tableau.

13voto

James Kanze Points 96599

À de très rares exceptions (je ne peux que penser d'un), C++ détermine l' tout le sens d'une expression (ou la sous-expression) à partir de l'expression lui-même. Ce que vous faites avec les résultats de l'expression n'a pas d'importance. Dans votre cas, dans l'expression a / b, il n'y a pas un doubledans de vue; tout est int. Ainsi, le compilateur utilise la division entière. Seulement une fois que le résultat n'envisager de quoi faire avec elle, et convertir double.

8voto

Alok Save Points 115848

Lorsque vous divisez deux entiers, le résultat sera un entier, indépendamment du fait que vous le stockiez dans un double.

7voto

larsmans Points 167484

c est double variable, mais la valeur attribuée à elle est un int de la valeur car il résulte de la division de deux ints, ce qui vous donne "division entière" (déposer le reste). Donc ce qui se passe dans la ligne c=a/b est

  1. a/b est évaluée, la création d'un temporaire de type int
  2. la valeur de la temporaire est attribué c après conversion en type double.

La valeur de a/b est déterminé sans référence à son contexte (affectation à l' double).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X