How can I convert integer into float in Java?

Go To StackoverFlow.com

62

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?

2010-12-07 14:42
by Roman
float result = ((float)x) / y - mibollma 2010-12-07 14:43
check this out: http://xahlee.org/java-a-day/casting.htm - fasseg 2010-12-07 14:45
possible duplicate of Java: dividing 2 ints makes an int?dogbane 2010-12-07 14:54
I Would suggest you use BigDecimal because floating point (Double, Float) representations and calculations are inexact, leading to erroneous results - Vinay Lodha 2010-12-07 15:05
@VinAy: I would not recommend that in this case. BigDecimal is not a universally correct replacement for float - Matt Ball 2010-12-07 15:09
@Matt: Yeah I agree.. but accuracy in Math operations is very important. Better not to write buggy program : - Vinay Lodha 2010-12-07 15:18
@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 - user207421 2010-12-07 22:45
I usually just multiply by 1.0, is that a bad idea? Like float z = x*1.0/y - medopal 2012-02-23 07:47


117

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;
2010-12-07 14:43
by Matt Ball
Is this more efficient, than: float z = (1.0 * x) / y; ? Is float conversion internally more efficient than multiplication? Tnx - MSquare 2013-09-13 09:34
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.Matt Ball 2013-09-13 14:15
The first and second one will cause errors on certain arm devices, make sure you cast both integers - Oliver Dixon 2014-07-26 01:00
java.lang.Integer cannot be cast to java.lang.Floa - a.s.p. 2014-10-06 11:48
@user3002853 read about boxed types vs primitives. http://docs.oracle.com/javase/tutorial/java/data/autoboxing.htm - Matt Ball 2014-10-06 12:28


5

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.

2010-12-07 15:49
by Peter Lawrey
You should elaborate on why double is better than float - Matt Ball 2010-12-08 16:04


5

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

float z = x * 1.0 / y;
2012-04-28 00:34
by user unknown


4

// The integer I want to convert

int myInt = 100;

// Casting of integer to float

float newFloat = (float) myInt
2015-12-22 05:43
by tej shah
in Android Studio at least, the compiler will complain about incompatible types trying to do this - Adam R. Turner 2019-01-07 00:10


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 !

2010-12-07 14:46
by LaGrandMere
Use of a wrapper type (Float) is totally unnecessary for this - Matt Ball 2010-12-07 14:47
You're totally right, your answer is much better : - LaGrandMere 2010-12-07 15:21
Please don't use signatures or taglines in your posts - meagar 2010-12-07 15:29


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.

2012-04-27 23:54
by LostOblivion
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 - user unknown 2012-04-28 00:40