2008-12-18 66 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"