Question

D'accord. Je suis dénigrement ma tête contre le mur comme 2 heures maintenant essayer de comprendre pourquoi dans le double answer = 364/365; monde me dit que answer est 0. Ou toute autre combinaison de double pour cette question, sa tronquer juste la décimale et je viens de don sais pas pourquoi.

Était-ce utile?

La solution

364/365 effectue une division entière (tronque la décimale).

Essayez double answer = 364.0/365; pour le forcer à exécuter la division à virgule flottante.

Quelque chose comme:

double days_in_year = 365;
double answer = 364/days_in_year;

fonctionnerait aussi bien, puisque l'un des opérandes est pas un entier.

Autres conseils

Vous prenez un type int (364) et en divisant par un autre type int (365) - la réponse va être un entier. Il est ensuite stocké dans une réponse de type double. Vous pouvez faire ce qui suit:

double answer = 364d / 365d;

Plus d'infos ici:

http://mindprod.com/jgloss/division.html

Vous devez faire ne double division. En ce moment, Java interprète comme division entière et en retournant le int tronqué.

Qu'est-ce que vous avez besoin est:

double answer = 364 / 365.0;

ou

double answer = 364 / (double) 365; 

La raison en est que le type de défaut de littéraux entiers en java est int et tout le résultat de tout arithemetic à base de int est coulé en arrière de type sur int. Par conséquent si votre réponse est 0.997, quand il est typecasted retour il devient 0:

(int)0.997  = 0

Vous pouvez faire comme ceci:

364.0/365.0

ou

((float)364)/365

Toutes les réponses ci-dessus sont justes, voudrais simplement ajouter qu'il est tout au sujet GIGO.

double answer = 364/365;

dans le code ci-dessus type double implique que pour répondre à l'expression variable et arithmétique a deux opérandes de type int. Ainsi, la sortie de l'expression arithmétique est de type int qui est alors par auto-up à la coulée du type à double sortie 0.0 donne, comme ci-dessous des exemples:

double ans = 4.0/0;

le code ci-dessus donne une sortie Infinity comme l'un des opérandes est un nombre à virgule flottante de sorte à travers automatique de type coulée 0 est converti en 0,0 et le résultat est que pour le type de données à virgule flottante.

alors que

double ans = 4/0;

donnera java.lang.ArithmeticException:. / Par zéro exception lors de l'exécution depuis les deux opérandes sont de type de données int et ainsi la sortie est selon le type de données entier indépendamment du type de données étant variable ans à double

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top