Dans un autre exercice de Bruce Eckels de calcul de la vitesse, v = s / t
où s et t sont des entiers. Comment faire en sorte que la division lance un flotteur?
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
Réponses:
Il suffit de lancer d'abord l'un des deux opérandes en flottant.
La distribution a une priorité plus élevée que la division, ce qui se passe avant la division.
L'autre opérande sera effectivement automatiquement converti en flottant par le compilateur car les règles disent que si l'un des opérandes est de type virgule flottante, l'opération sera une opération en virgule flottante, même si l'autre opérande est intégral. Spécification du langage Java, §4.2.4 et §15.17
la source
Essayer:
La conversion des entiers en flotteurs permettra une division en virgule flottante.
Cependant, vous n'avez vraiment besoin d'en lancer qu'un.
la source
Convertissez l'un des nombres entiers en flottant pour forcer l'opération à être effectuée avec des calculs en virgule flottante. Sinon, le calcul des nombres entiers est toujours préféré. Alors:
la source
Pour réduire l'impact sur la lisibilité du code, je suggère:
la source
Vous pouvez lancer le numérateur ou le dénominateur pour flotter ...
Les opérations int renvoient généralement int, vous devez donc modifier l'un des numéros d'opérande.
la source
Vous pouvez lancer ne serait-ce qu'un seul d'entre eux, mais par souci de cohérence, vous voudrez peut-être lancer explicitement les deux afin que quelque chose comme v = (float) s / (float) t devrait fonctionner.
la source
Norme JLS
JLS 7 15.17.2. Opérateur de division / dit:
C'est pourquoi
1/2
ne donne pas de flotteur.Il suffit de convertir l'un ou l'autre en flottant comme dans
(float)1/2
car 15.17. Opérateurs multiplicatifs dit:et 5.6.2. Promotion numérique binaire dit:
la source
Transtypez l'un des nombres entiers / les deux de l'entier en float pour forcer l'opération à être effectuée avec des mathématiques à virgule flottante. Sinon, le nombre entier Math est toujours préféré. Alors:
la source
Essaye ça:
la source