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

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


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 »