2008-12-14 6 views
9

Voici un exemple:valeur double retourne 0

Double d = (1/3); 
System.out.println(d); 

retourne 0, pas 0,33333 ... comme il se doit.

Quelqu'un sait-il?

+0

La duplication possible de [Division en Java aboutit toujours à zéro (0)?] (Http://stackoverflow.com/questions/10455677/division-in-java-always-results-in- zéro-0) –

+0

@ ΦXocę 웃 Пepeúpa ツ Ce n'est pas un doublon. Cette question est un doublon de cette question. Regardez les dates avant que vous ne marquez – Zoe

Répondre

38

C'est parce que 1 et 3 sont traités comme integers lorsque vous ne spécifiez pas autrement, si la 1/3 évalue integer0 qui est ensuite jeté à la double0. Pour le résoudre, essayez (1.0/3), ou peut-être 1D/3 pour indiquer explicitement que vous avez affaire à des valeurs doubles.

12

Si vous avez int s que vous souhaitez diviser en utilisant la division à virgule flottante, vous devrez lancer le int à un double:

double d = (double)intValue1/(double)intValue2 

(En fait, la coulée ne intValue2 devrait être suffisant pour avoir le intValue1 transtypée à double automatiquement, je crois.)

1

utilisez à double et non Double à moins que vous devez utiliser ces Valu es dans le sens de l'objet. Tenez-vous au courant des concepts Autoboxing

+0

L'OP posait des questions sur les méthodes de troncature de Java et pourquoi une division d'entiers est tronquée, même si elle est stockée dans un double; pas sur l'autoboxing. – MathSquared

Questions connexes