In another Bruce Eckels exercise in calculating velocity, v = s / t
where s and t are integers. How do I make it so the division cranks out a float?
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
Just cast one of the two operands to a float first.
The cast has higher precedence than the division, so happens before the division.
The other operand will be effectively automatically cast to a float by the compiler because the rules say that if either operand is of floating point type then the operation will be a floating point operation, even if the other operand is integral. Java Language Specification, §4.2.4 and §15.17
JLS Standard
JLS 7 15.17.2. Division Operator / says:
This is why
1/2
does not give a float.Converting just either one to float as in
(float)1/2
suffices because 15.17. Multiplicative Operators says:and 5.6.2. Binary Numeric Promotion says:
You can cast the numerator or the denominator to float...
int operations usually return int, so you have to change one of the operanding numbers.