190 votes

Comment faire en sorte que la division de deux entiers produise un flottant au lieu d'un autre entier ?

Dans un autre exercice de Bruce Eckels sur le calcul de la vélocité, v = s / t où s et t sont des entiers. Comment puis-je faire en sorte que la division produise un flottant ?

class CalcV {
  float v;
  float calcV(int s, int t) {
    v = s / t;
    return v;
  } //end calcV
}

public class PassObject {

  public static void main (String[] args ) {
    int distance;
    distance = 4;

    int t;
    t = 3;

    float outV;

    CalcV v = new CalcV();
    outV = v.calcV(distance, t);

    System.out.println("velocity : " + outV);
  } //end main
}//end class

0 votes

Float v=s/t effectue la division puis transforme le résultat en un float. float v=(float)s/t est converti en float puis effectue la division.

374voto

Alnitak Points 143355

Il suffit de transformer l'un des deux opérandes en un flottant d'abord.

v = (float)s / t;

La distribution a une priorité plus élevée que la division, elle a donc lieu avant la division.

L'autre opérande sera automatiquement converti en flottant par le compilateur car les règles stipulent que si l'un des opérandes est de type flottant, l'opération sera une opération en flottant, même si l'autre opérande est intégral. Spécification du langage Java, §4.2.4 y §15.17

9 votes

Grrr, ça m'a pris environ 30 minutes jusqu'à ce que je trouve ça et que je le résolve. Si simple. :D

0 votes

Plus précisément, cette règle particulière est mentionnée ici : Opérateurs multiplicatifs alors laissons-le ici pour une référence future.

5 votes

(Pour ceux qui trouveront cette question plus tard, les liens donnés sont cassés. Les nouveaux liens sont les suivants : docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.4 y docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17 )

18voto

anisoptera Points 330

Essayez :

v = (float)s / (float)t;

Le fait de convertir les ints en floats permettra de réaliser la division en virgule flottante.

Vous n'avez vraiment besoin que d'un seul lancer, cependant.

1 votes

Je ne sais pas, c'est comme dire que vous devriez utiliser des longs au lieu des ints.

8voto

starblue Points 29696

En plus des autres réponses :

Utilisez toujours le double pour les calculs en virgule flottante. *

*Sauf s'il existe un besoin spécifique d'utiliser les flottants, par exemple pour économiser de la mémoire ou accélérer les calculs.

3voto

Uri Points 50687

Vous pouvez même n'en utiliser qu'un seul, mais pour des raisons de cohérence, vous voudrez peut-être utiliser explicitement les deux. Ainsi, quelque chose comme v = (float)s / (float)t devrait fonctionner.

3voto

Vous pouvez lancer le numérateur ou le dénominateur pour flotter...

Les opérations sur les int renvoient généralement des int, vous devez donc modifier l'un des nombres opératoires.

2 votes

Habituellement ? S'ils reviennent un jour, ils vont revenir à l'intérieur.

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