Big Moose Saloon
 Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies Register / Login

Interger.parseInt(String str, int radix), Long.parseLong(String str, int radix)

Sadashiv Borkar
Ranch Hand

Joined: Jun 07, 2000
Posts: 49
Hi All,
If you see the wrapper classes you will find a method called parseXX(String str, int radix)
where XX is the name of the wrapper class

Now when I read the JLS I found out the following
Byte.parseByte("A",27) returns 10 //Not in JLS
Short.parseShort("A" 27) returns 10 //Not in JLS
parseInt("Kona", 27) returns 411787
parseLong("Hazelnut", 36) returns 1356099454469L
Cna anyone please clear my doubt that what is radix 27,36...As far as i know there r only following radix(10, 16, 8 ) what's the use of this radix and how does it converts the String into an integer.Or to be specific how does it convert a String (like "Kona" and "Haze1nut") to a number(whats the methodology used?)
Cindy Glass
"The Hood"
Sheriff

Joined: Sep 29, 2000
Posts: 8521
From: http://www.utm.edu/research/primes/glossary/Radix.html
We usually write numbers using a place-value system. For example, in decimal 1101 means
1.103 + 1.102 + 0.10 + 1
and in binary 1101 would mean
1.23 + 1.22 + 0.2 + 1 (= 13 in decimal).
In general, a position numbering system encodes the numbers as
anbn + an-1bn-1 + . . . + a2b2+ a1b+ a0 (0 < ai < b, i=0,1,2,...,n)
where the integer b>1 is the radix or base. So decimal is "radix 10" and binary is "radix 2." Other common systems include octal (radix 8)
and hexadecimal (radix 16, here we need to add some more digits: 'a'=10, 'b'=11, 'c'=12, 'd'=13, 'e'=14 and 'f'=15). If it is not clear for the
context which radix we are using, we usually add it as a subscript. For example, (23)4 = (21)5 = (11)10 = (b)16.
We can extend this to cover all reals if we allow the inclusion of a negative sign and a radix-point (decimal point):
(anan-1. . . a2a1a0. a-1a-2a-3 . . . )b = anbn + an-1bn-1 + . . . + a2b2 + a1b + a0 + a-1b- 1 + a-2b-2 + a-3b-3 + . . .

"JavaRanch, where the deer and the Certified play" - David O'Meara
Cindy Glass
"The Hood"
Sheriff

Joined: Sep 29, 2000
Posts: 8521
In other words you are telling the wrapper class what base that you want the String converted into.
Sadashiv Borkar
Ranch Hand

Joined: Jun 07, 2000
Posts: 49
Hi Cindy,
Thanx for the explanation and the link it was really useful for me.But I think u misunderstood my question.What I donot understand that how does it convert the Strings like "KONA" and "Haze1Nut" to integer value.If you see carefully that the above values are not numbers.So does it uses the ascii value of each character for converting it into an appropriate number or what does it use for that.
Now if you see below that the following function gives you correct results.
parseInt("Kona", 27) returns 411787
parseLong("Hazelnut", 36) returns 1356099454469L
Now if I change the following radix to 10 It gives me a NumberFormatException
parseInt("Kona", 10) returns 411787
parseLong("Hazelnut", 10) returns 1356099454469L
So whats the reason For giving the number format exception.
I understand that
radiix of 10 is used for conversion odf decimal numbers .
radiix of 8 is used for the conversion of Octal numbers.
radiix of 16 is used for the conversion of hexadecimal numbers.
Then can anyone clarify what is the use of the radiix 27 and 36
for what type of numbers are they used.Iam confused.
Thanx in advance.
Sada
Kourosh Keshavarzi
Ranch Hand

Joined: Oct 23, 2000
Posts: 66
Hi Sadashiv,
radix 10,8,and 16 are not the only radix you can have
they are simply the more popular ones and the one
you'll need most of the time.
But you can have any radix you want ..,3,4,5,6,7,8,..100,...etc.
If you were right a Math program like calculating pi may be you might find a use for it.

Now as for why is that that when you change the following radix to 10 It gives you a NumberFormatException:
When you have radix 2 you can only use values 0 and 1
When you have radix 8 you can only use values 0 to 7
When you have radix 16 you can only use values 0 to F (15)
When you have radix 27 you can only use values 0 to q (26)
So when you change the radix to 10 "k", "o", "n" are not
allowed. Its like using 5 with binary data. You can't.

As for how does it convert the Strings like "KONA".
parseInt("Kona", 27) returns 411787
k=20, o=24, n=23, a=10
I'll use ^ to mean to the power of , not xor
So: (20*(27^3)) + (24*(27^2)) + (23*(27^1)) + (10*(27^0)) =
393660 + 17496 + 621 + 10 = 411787

Hope this helped
Best of luck
Kourosh
Sadashiv Borkar
Ranch Hand

Joined: Jun 07, 2000
Posts: 49
Hi Kourosh Keshavarzi,
It was really a Fantastic Answer which cleared All my doubts.
Thanx a Million times
bye
take care
Sada

I agree. Here's the link: http://aspose.com/file-tools

subject: Interger.parseInt(String str, int radix), Long.parseLong(String str, int radix)