PureScript是否支持像C / Java等“格式化字符串”?

时间:2016-03-04 16:53:14

标签: purescript

我需要输出一个带前导零和六位数的数字。在C或Java中,我会使用"%06d"作为格式字符串来执行此操作。 PureScript是否支持格式字符串?或者我将如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

我不知道任何支持PureScript中printf样式功能的模块。如果有一种类型安全的格式化数字,那将是非常好的。

与此同时,我会写这样的东西:

import Data.String (length, fromCharArray)
import Data.Array (replicate)

-- | Pad a string with the given character up to a maximum length.
padLeft :: Char -> Int -> String -> String
padLeft c len str = prefix <> str
  where prefix = fromCharArray (replicate (len - length str) c)

-- | Pad a number with leading zeros up to the given length.
padZeros :: Int -> Int -> String
padZeros len num | num >= 0  = padLeft '0' len (show num)
                 | otherwise = "-" <> padLeft '0' len (show (-num))

产生以下结果:

> padZeros 6 8
"000008"

> padZeros 6 678
"000678"

> padZeros 6 345678
"345678"

> padZeros 6 12345678
"12345678"

> padZeros 6 (-678)
"-000678"

编辑:与此同时,我编写了一个可以通过这种方式格式化数字的小模块: https://github.com/sharkdp/purescript-format

对于您的特定示例,您需要执行以下操作:

如果您想格式化 Int egers:

> format (width 6 <> zeroFill) 123
"000123"

如果要格式化数字 s

> format (width 6 <> zeroFill <> precision 1) 12.345
"0012.3"