【问题标题】:Convert haskell Int with leading zero to String将前导零的haskell Int转换为String
【发布时间】:2008-12-18 05:22:04
【问题描述】:

假设我有一个 Int = 08 类型的变量,如何将其转换为保持前导零的字符串?

例如:

v :: Int
v = 08

show v

输出:8

我希望输出为“08”。

这可能吗?

【问题讨论】:

  • Ops,输出实际上是“8”,而不是8。
  • 嗯,说 v = 08 与说 v = 8 或 v = 008 或 v = 0000008 是一样的。没有办法取回你定义 v 使用了多少个 0 的信息。您只能使用一定数量的 0 打印它,如下面的答案所示。

标签: string haskell int


【解决方案1】:

使用Text.Printf.printf:

printf "%02d" v

确保先导入Text.Printf.printf

【讨论】:

  • 只是import Text.Printf
  • import Text.Printf (printf)
【解决方案2】:

它是 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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 相反听起来更好。将其存储为 int 并将其更改为 string 以用于显示目的。
    【解决方案4】:

    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"
    

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 2011-02-06
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多