In einer anderen Übung von Bruce Eckels zur Berechnung der Geschwindigkeit, v = s / t
wobei s und t ganze Zahlen sind. Wie mache ich es so, dass die Division einen Schwimmer herauskurbelt?
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
Antworten:
Wirf einfach zuerst einen der beiden Operanden auf einen Float.
Die Besetzung hat eine höhere Priorität als die Teilung, dies geschieht also vor der Teilung.
Der andere Operand wird vom Compiler automatisch in einen Gleitkommawert umgewandelt, da die Regeln besagen, dass die Operation eine Gleitkommaoperation ist, wenn einer der Operanden vom Gleitkommatyp ist, selbst wenn der andere Operand ganzzahlig ist. Java-Sprachspezifikation, §4.2.4 und §15.17
quelle
Versuchen:
Wenn Sie die Ints in Floats umwandeln, kann eine Gleitkommadivision stattfinden.
Sie müssen aber wirklich nur einen besetzen.
quelle
Wirf eine der ganzen Zahlen in einen Gleitkommawert, um zu erzwingen, dass die Operation mit Gleitkomma-Mathematik ausgeführt wird. Ansonsten wird immer eine ganzzahlige Mathematik bevorzugt. So:
quelle
Um die Auswirkungen auf die Lesbarkeit des Codes zu verringern, würde ich Folgendes vorschlagen:
quelle
Sie können den Zähler oder den Nenner in Float umwandeln ...
int-Operationen geben normalerweise int zurück, daher müssen Sie eine der Operandennummern ändern.
quelle
Sie können auch nur einen von ihnen umwandeln, aber aus Gründen der Konsistenz möchten Sie möglicherweise beide explizit umwandeln, damit so etwas wie v = (float) s / (float) t funktioniert.
quelle
JLS Standard
JLS 7 15.17.2. Abteilungsbetreiber / sagt:
Deshalb
1/2
gibt es keinen Schwimmer.Die Konvertierung von nur einem in Float wie in
(float)1/2
genügt, weil 15.17. Multiplikative Operatoren sagt:und 5.6.2. Binary Numeric Promotion sagt:
quelle
Wirf eine der ganzen Zahlen / beide der ganzen Zahl in float, um die Operation mit Gleitkomma-Mathematik zu erzwingen. Ansonsten wird immer eine ganzzahlige Mathematik bevorzugt. So:
quelle
Versuche dies:
quelle