Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert haskell Int with leading zero to String

Suppose I have a variable of type Int = 08, how can I convert this to String keeping the leading zero?

For instance:

v :: Int
v = 08

show v

Output: 8

I want the output to be "08".

Is this possible?

like image 814
rfgamaral Avatar asked Dec 18 '08 05:12

rfgamaral


4 Answers

Use Text.Printf.printf:

printf "%02d" v

Make sure to import Text.Printf.printf first.

like image 85
mipadi Avatar answered Oct 24 '22 11:10

mipadi


Its 8, not 08 in variable v. Yes, you assigned it 08 but it receives 8. Thats the reason show method displayed it as 8. You can use the work around given by Mipadi.

Edit:

Output of a test.

Prelude> Text.Printf.printf "%01d\n" 08
8
Prelude> Text.Printf.printf "%02d\n" 08
08
Prelude> Text.Printf.printf "%03d\n" 08
008

Output of another test.

Prelude> show 08
"8"
Prelude> show 008
"8"
Prelude> show 0008
"8"

I hope you get the point.

Edit:

Found another workaround. Try this,

"0" ++ show v
like image 24
Adeel Ansari Avatar answered Oct 24 '22 10:10

Adeel Ansari


Depending on what you are planning to do you might want to store the "08" as a string and only convert to int when you need the value.

like image 40
TheMarko Avatar answered Oct 24 '22 09:10

TheMarko


The printf way is probably best, but it's easy enough to write your own function:

show2d :: Int -> String 
show2d n | length (show n) == 1 = "0" ++ (show n)
         | otherwise = show n

Works as follows:

Prelude> show2d 1
"01"
Prelude> show2d 10
"10"
Prelude> show2d 100
"100"
like image 43
parker.sikand Avatar answered Oct 24 '22 10:10

parker.sikand