converting float hex to int
k mayank
Greenhorn
Posts: 27
posted 8 years ago
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,
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
Posts: 192
posted 8 years ago
1. A NumberFormatException will be thrown because the Hex value is floating point, and your trying to convert it to an Integer, a nonfloating 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.
1. A NumberFormatException will be thrown because the Hex value is floating point, and your trying to convert it to an Integer, a nonfloating 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
Marshal
Posts: 53135
124
k mayank
Greenhorn
Posts: 27
posted 8 years ago
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,
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,
mayank
k mayank
Greenhorn
Posts: 27
Campbell Ritchie
Marshal
Posts: 53135
124
posted 8 years ago
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 arbitraryprecision type such as BigInteger or BigDecimal (look those up in the Java API documentation).
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 arbitraryprecision type such as BigInteger or BigDecimal (look those up in the Java API documentation).
k mayank
Greenhorn
Posts: 27
k mayank
Greenhorn
Posts: 27
posted 7 years ago
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,
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,
mayank
Campbell Ritchie
Marshal
Posts: 53135
124
posted 7 years ago
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.
Happiness is not a goal ... it's a byproduct of a life well lived  Eleanor Roosevelt. Tiny ad:
the new thread boost feature: great for the advertiser and smooth for the coderanch user
https://coderanch.com/t/674455/ThreadBoostfeature
