107

I have two integers x and y. I need to calculate x/y and as outcome I would like to get float. For example as an outcome of 3/2 I would like to have 1.5. I thought that easiest (or the only) way to do it is to convert x and y into float type. Unfortunately, I cannot find an easy way to do it. Could you please help me with that?

8
  • 8
    float result = ((float)x) / y? Commented Dec 7, 2010 at 14:43
  • check this out: xahlee.org/java-a-day/casting.html Commented Dec 7, 2010 at 14:45
  • 2
    possible duplicate of Java: dividing 2 ints makes an int? Commented Dec 7, 2010 at 14:54
  • 1
    @VinAy: I would not recommend that in this case. BigDecimal is not a universally correct replacement for float. Commented Dec 7, 2010 at 15:09
  • 1
    @VinAy: It depends entirely what the purpose is. If he is doing finance, you are correct. If he is computing asteroid trajectories, you aren't. Commented Dec 7, 2010 at 22:45

6 Answers 6

183

You just need to cast at least one of the operands to a float:

float z = (float) x / y;

or

float z = x / (float) y;

or (unnecessary)

float z = (float) x / (float) y;
Sign up to request clarification or add additional context in comments.

5 Comments

Is this more efficient, than: float z = (1.0 * x) / y; ? Is float conversion internally more efficient than multiplication? Tnx!
I don't know, but I think it's irrelevant 99% or more of the time. It's not even remotely going to be a bottleneck. If you're truly that concerned, benchmark it yourself.
The first and second one will cause errors on certain arm devices, make sure you cast both integers.
java.lang.Integer cannot be cast to java.lang.Float
@user3002853 read about boxed types vs primitives. docs.oracle.com/javase/tutorial/java/data/autoboxing.html
12

// The integer I want to convert

int myInt = 100;

// Casting of integer to float

float newFloat = (float) myInt

1 Comment

in Android Studio at least, the compiler will complain about incompatible types trying to do this.
7

You shouldn't use float unless you have to. In 99% of cases, double is a better choice.

int x = 1111111111;
int y = 10000;
float f = (float) x / y;
double d = (double) x / y;
System.out.println("f= "+f);
System.out.println("d= "+d);

prints

f= 111111.12
d= 111111.1111

Following @Matt's comment.

float has very little precision (6-7 digits) and shows significant rounding error fairly easily. double has another 9 digits of accuracy. The cost of using double instead of float is notional in 99% of cases however the cost of a subtle bug due to rounding error is much higher. For this reason, many developers recommend not using floating point at all and strongly recommend BigDecimal.

However I find that double can be used in most cases provided sensible rounding is used.

In this case, int x has 32-bit precision whereas float has a 24-bit precision, even dividing by 1 could have a rounding error. double on the other hand has 53-bit of precision which is more than enough to get a reasonably accurate result.

1 Comment

You should elaborate on why double is better than float.
7

You just need to transfer the first value to float, before it gets involved in further computations:

float z = x * 1.0 / y;

Comments

3

Here is how you can do it :

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int x = 3;
    int y = 2;
    Float fX = new Float(x);
    float res = fX.floatValue()/y;
    System.out.println("res = "+res);
}

See you !

2 Comments

Use of a wrapper type (Float) is totally unnecessary for this.
Please don't use signatures or taglines in your posts.
1

Sameer:

float l = new Float(x/y)

will not work, as it will compute integer division of x and y first, then construct a float from it.

float result = (float) x / (float) y;

Is semantically the best candidate.

1 Comment

Your answer should have been a comment. Sameer will receive no notification of your post. Semantically, converting both ints to float before computing the result is needless - therefore it isn't better, than tranforming just one. It gives a wrong impression, and is therefore inferior, imho.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.