将带有前导零的 haskell Int 转换为 String

发布于 2024-07-10 17:13:19 字数 164 浏览 7 评论 0原文

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

例如:

v :: Int
v = 08

show v

输出:8

我希望输出为“08”。

这可能吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

無處可尋 2024-07-17 17:13:19

使用 Text.Printf.printf

printf "%02d" v

确保先导入 Text.Printf.printf

Use Text.Printf.printf:

printf "%02d" v

Make sure to import Text.Printf.printf first.

十雾 2024-07-17 17:13:19

它是 8,而不是变量 v 中的 08。 是的,您分配给它 08 但它收到 8。这就是 show 方法将其显示为 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

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
唐婉 2024-07-17 17:13:19

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

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.

醉酒的小男人 2024-07-17 17:13:19

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"

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"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文