307 votes

La division d’entiers de Java : Comment fabriquez-vous un double ?

<pre><code></code><p>Cela se traduit par 0. Je sais que vous pouvez le forcer à travailler en faisant</p><pre><code></code></pre><p>mais il doit y avoir une autre façon, droite ? Je n’aime pas les primitives de coulée, qui sait ce qui peut arriver.</p></pre>

193voto

Matthew Flaschen Points 131723
double num = 5;

Qui évite un plâtre. Mais vous trouverez que le casting conversions sont bien définis. Vous n'avez pas à deviner, il suffit de cocher la JLS. int en double est un élargissement de conversion. De §5.1.2:

L'élargissement primitive conversions ne sont pas perdre des informations sur l'ensemble de la ordre de grandeur d'une valeur numérique.

[...]

La Conversion d'un int ou un long valeur flotter, ou d'une valeur de type long à double, qui peut entraîner la perte de précision-c'est, le résultat peut perdre certains des bits de poids faible de la valeur. Dans ce cas, l' valeur à virgule flottante sera un arrondie version de la valeur d'entier, en utilisant la norme IEEE 754 d'arrondi au plus proche du mode (§4.2.4).

5 peut être exprimé exactement comme un double.

126voto

Paul Tomblin Points 83687

Quel est le problème avec les primitives de coulée ?

Si vous ne voulez pas monter pour une raison quelconque, vous pourriez faire

89voto

Jesper Points 65733

Je n'aime pas le casting primitives, qui sait ce qui peut arriver.

Pourquoi avez-vous une peur irrationnelle de la coulée de primitives? Rien de mauvais va se passer lorsque vous lancez un int d'un double. Si vous n'êtes tout simplement pas sûr de savoir comment il fonctionne, regarder la Java Language Specification. Le coulage d'un int de double est un élargissement des primitives de conversion.

Vous pouvez vous débarrasser de la paire de parenthèses par le casting du dénominateur au lieu de le numérateur:

double d = num / (double) denom;

34voto

Andreas Points 130

Juste pour ajouter à la conversation que coulée le résultat ne le ferai pas

Cela signifie que vous devez vous rappeler de se faufiler dans un double à nouveau si votre formule change. C’est aussi la raison pour laquelle que je ne préfère pas la solution de changer le type d’une variable à double comme la réponse acceptée (parce que si cette variable cesse d’être partie du calcul du résultat est foiré).

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