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

### Question:

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  ``

### Solution:1

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

### Solution:2

Try:

``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.

### Solution:3

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

``v = 1d* s/t;  ``

### Solution:4

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;  ``

### Solution:5

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.

### Solution:6

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.

### Solution:7

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;  ``

### Solution:8

JLS Standard

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

### Solution:9

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
Previous
Next Post »