2008-12-18 90 views
8

假設我有一個int類型= 08的變量​​,我怎麼可以將它轉換爲字符串保持前導零?轉換哈斯克爾詮釋與領先的零字符串

例如:

v :: Int 
v = 08 

show v 

輸出:8

我想要的輸出爲 「08」。

這可能嗎?

+0

行動,輸出實際上是 「8」,而不是8 – 2008-12-18 05:24:32

+1

嗯,說v = 08和v = 8或v = 008或v = 0000008一樣。沒有辦法找回你已經定義了多少個0的信息。您只能打印一定數量的0,如下面的答案。 – ShreevatsaR 2008-12-18 05:54:57

回答

3

取決於你正在計劃做你可能要存儲「08」爲一個字符串,只轉換爲int,當你需要的價值。

19

使用Text.Printf.printf

printf "%02d" v 

確保導入Text.Printf.printf第一。

+0

它只是`進口Text.Printf` – cevaris 2014-09-17 06:26:24

8

它的8個,08不變量v。是的,您分配它08,但卻接收8.這就是原因顯示方法顯示它作爲8.您可以使用the work around given by Mipadi

編輯:測試的

輸出。

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

另一個測試的輸出。

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

我希望你明白這一點。

編輯:

發現了另一種解決方法。試試這個,

"0" ++ show v 
1

printf的方法可能是最好的,但它是很容易寫自己的功能:

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

的工作原理如下:

Prelude> show2d 1 
"01" 
Prelude> show2d 10 
"10" 
Prelude> show2d 100 
"100"