File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Beginning Java and the fly likes whats the difference between float & double Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Java Interview Guide this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "whats the difference between float & double " Watch "whats the difference between float & double " New topic

whats the difference between float & double

Vas Miriyala
Ranch Hand

Joined: Sep 14, 2009
Posts: 114

Dear all
I have got some question about float & double , my answer is due to precision because float is 32 bit integer and double is 64 bit integer, However I am not sure...please help me

Output :

In first case why it is not equal and in case the value is same,why is it so?
Ian Lubelsky
Ranch Hand

Joined: Feb 10, 2010
Posts: 49
I think you are getting "different" for the 3.2 because a computer's floating point unit works with base 2 binary and 0.2 can't be represented precisely in binary, it is called a repeater fraction. In base-2 only numbers with denominators that are powers of 2 are terminating, which I think is only .25, .50, and .75, which is why 6.5 shows up as "same".

Hope this helps, but there may be better minded people out there that can give you a better explanation perhaps.
Jim Hoglund
Ranch Hand

Joined: Jan 09, 2008
Posts: 525
Float and double values are not integers, but rather floating point numbers. The Java
integer types are: byte, short, int, long (and char - 16 bits unsigned). In both cases
your code is comparing a float value to a double, as the compiler sees 3.2f as a float
and 3.2 (without the f) as a double. I suspect the precision of the compare logic has
something to do with the different results. Someone else may comment further.

Jim ... ...

Vas Miriyala
Ranch Hand

Joined: Sep 14, 2009
Posts: 114

The float data type is a single-precision 32-bit
The double data type is a double-precision 64-bit
marc weber

Joined: Aug 31, 2004
Posts: 11343

According to JLS - 3.10.2 Floating-Point Literals...
A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double...

So in line 6, f1 is assigned the value 3.2f, which is a float.

But in line 9, this value is compared to the value 3.2, which is a double.

These are not equal because the value 3.2 cannot be precisely stored (in binary) within the range of a float.

"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
Sebastian Hatt

Joined: May 30, 2010
Posts: 1
As Ian pointed out, 6.5 can be represented exactly in binary, whereas 3.2 can't. That's why the difference in precision doesn't matter for 6.5, so 6.5 == 6.5f.

To quickly refresh how binary numbers work:

100 -> 4
10 -> 2
1 -> 1
0.1 -> 0.5 (or 1/2)
0.01 -> 0.25 (or 1/4)

6.5 in binary: 110.1 (exact result, the rest of the digits are just zeroes)
3.2 in binary: 11.001100110011001100110011001100110011001100110011001101... (here precision matters!)

A float only has 24 bits precision (the rest is used for sign and exponent), so:

3.2f in binary: 11.0011001100110011001100 (not equal to the double precision approximation)

There's a handy calculator for things like this at

Basically it's the same as when you're writing 1/5 and 1/7 in decimal numbers:

1/5 = 0,2
1,7 = 0,14285714285714285714285714285714...
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 15101

A float is a 32-bit, single-precision IEEE 754 floating point number.

A double is a 64-bit, double-precision IEEE 754 floating point number.

Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 8 API documentation
Campbell Ritchie

Joined: Oct 13, 2005
Posts: 46437
Welcome to the Ranch Sebastian Hatt, and thank you for that useful first reply.
It is sorta covered in the JavaRanch Style Guide.
subject: whats the difference between float & double
It's not a secret anymore!