假设我有一个 Int = 08 类型的变量,如何将其转换为 String 并保留前导零?

例如:

v :: Int
v = 08

show v

输出:8

我希望输出为“08”。

这可能吗?

有帮助吗?

解决方案

根据您计划执行的操作,您可能希望将“08”存储为字符串,并且仅在需要该值时才转换为 int。

其他提示

使用 Text.Printf.printf:

printf "%02d" v

确保导入 Text.Printf.printf 第一的。

它是 8,而不是变量中的 08 v. 。是的,您分配给它 08,但它收到 8。这就是原因 展示 方法显示为8。您可以使用 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

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"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top