This week's book giveaway is in the OCMJEA forum.
We're giving away four copies of OCM Java EE 6 Enterprise Architect Exam Guide and have Paul Allen & Joseph Bambara on-line!
See this thread for details.
The moose likes Java in General and the fly likes converting float hex to int Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCM Java EE 6 Enterprise Architect Exam Guide this week in the OCMJEA forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "converting float hex to int" Watch "converting float hex to int" New topic
Author

converting float hex to int

k mayank
Greenhorn

Joined: Feb 09, 2009
Posts: 27
Hi Friends,
I have a strange stiuation here.
I need to use a float number(because it is 20 or more, digits long), then calculate hexadecimal of this number, and then save the result in an integer and use that as a key.

However, the below program prints 0x1.5af1d8p66

float x= 99999999999999999999f; //20 9's
System.out.println(Float.toHexString(x));


Now I'm not able to convert this String result "s" to integer. Please help.

Regards,


mayank
Ryan Beckett
Ranch Hand

Joined: Feb 22, 2009
Posts: 192



1. A NumberFormatException will be thrown because the Hex value is floating point, and your trying to convert it to an Integer, a non-floating point data type.

2. A float can't represent a 20 digit number in binary. You lose precision when your print that variable. Nor can a double represent a value that big, so you'll have to use the BigDecimal class.


e.g



3. Unfortunately, I don't see how to convert a BigDecimal object to a Hex String. But, I hope that helps.
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38509
    
  23
You can't fit that number into an int. An int can't take more than 10 digits.
k mayank
Greenhorn

Joined: Feb 09, 2009
Posts: 27
Sorry,

Some how the code I posted was wrong.
float x= 99999999999999999999f; //20 9's
String s = Float.toHexString(x);
System.out.println(s);


Thanks for your reply. I have checked on the BigDecimal class before posting but dont want to write seperate code just to calculate Hexadecimal of a number.
looking for some java API which can do this for me.

Regards,
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38509
    
  23
What about this or this?
k mayank
Greenhorn

Joined: Feb 09, 2009
Posts: 27
Thanks for your reply.
Both Sound good but as I mentioned in my first post, they dont give back exact Hex string. Float gives 0x1.5af1d8p66 and I was unable to convert it into clean Hexadecimal string.

Regards,



Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38509
    
  23
I wrote:What about this or this?
Have you tried those links? They will give 256.0f -> 43800000 and -256.0f -> c3800000 which is a "clean" hex result. You do of course have to print the result with the %x formatting tags.
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14117
    
  16

k mayank wrote:I need to use a float number(because it is 20 or more, digits long), ...

Note that a float (nor a double) can store numbers of 20 digits. The precision of floats and doubles is limited: float can store about 7 decimal digits, and double about 15 decimal digits.

If you really need to preserve all the 20 digits, you should use an arbitrary-precision type such as BigInteger or BigDecimal (look those up in the Java API documentation).


Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
Scala Notes - My blog about Scala
k mayank
Greenhorn

Joined: Feb 09, 2009
Posts: 27
Hi All,

Thanks for your replies
This has been really helpful.

Regards,
k mayank
Greenhorn

Joined: Feb 09, 2009
Posts: 27
Hi Campbell,

As soon as I thought I have got this done someone pointed out the mistake.
When I give 256.0f, The answer I expect is 100 and not 4380000.

When I try String s = String.format("%x",256L); I get the required result,
But this can only work for long data type. This fails as soon as I give more than 19 digits and I need to work with 20 digita.
Can you let me know how to work through this.
A quick hint by all is very much appretiated as this is bocomming a priprity now.

Regards,
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38509
    
  23
Somebody has already told you to use java.math.BigInteger; I think that will sort out your problem. It appears in Formatter that the %x tag can be applied to BigInteger.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: converting float hex to int