假设我有一个Int = 08类型的变量,如何将其转换为String保持前导零?
例如:
v :: Int
v = 08
show v
输出:8
我希望输出为“08”。
这可能吗?
答案 0 :(得分:21)
使用Text.Printf.printf
:
printf "%02d" v
请务必先导入Text.Printf.printf
。
答案 1 :(得分:8)
它的8,而不是变量 v 中的08。是的,您已将其分配为08,但它收到8.这是 show 方法将其显示为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
答案 2 :(得分:3)
根据您的计划,您可能希望将“08”存储为字符串,并在需要该值时仅转换为int。
答案 3 :(得分: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"