Tutorial :How to make the division of 2 ints produce a float instead of another int?


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.

v = (float)s / t;  

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



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

Casting the ints to floats will allow floating-point division to take place.

You really only need to cast one, though.


To lessen the impact on code readabilty, I'd suggest:

v = 1d* s/t;  


Cast one of the integers to a float to force the operation to be done with floating point math. Otherwise integer math is always preferred. So:

v = (float)s / t;  


You can cast even just one of them, but for consistency you may want to explicitly cast both so something like v = (float)s / (float)t should work.


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.


Cast one of the integers/both of the integer to float to force the operation to be done with floating point Math. Otherwise integer Math is always preferred. So:

1. v = (float)s / t;  2. v = (float)s / (float)t;  


JLS Standard

JLS 7 15.17.2. Division Operator / says:

Integer division rounds toward 0.

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:

Binary numeric promotion is performed on the operands

and 5.6.2. Binary Numeric Promotion says:

  • If either operand is of type double, the other is converted to double.
  • Otherwise, if either operand is of type float, the other is converted to float


Try this:

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

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »