PureScript 是否支持 C / Java 等“格式字符串”?
Does PureScript support “format strings” like C / Java etc.?
我需要输出一个带前导零的六位数字。在 C 或 Java 中,我会使用 "%06d"
作为格式字符串来执行此操作。 PureScript 是否支持格式字符串?或者我该如何实现?
我不知道有任何模块会支持 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
对于您的特定示例,您需要执行以下操作:
如果要格式化Integers:
> format (width 6 <> zeroFill) 123
"000123"
如果要格式化个数个
> format (width 6 <> zeroFill <> precision 1) 12.345
"0012.3"
我需要输出一个带前导零的六位数字。在 C 或 Java 中,我会使用 "%06d"
作为格式字符串来执行此操作。 PureScript 是否支持格式字符串?或者我该如何实现?
我不知道有任何模块会支持 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
对于您的特定示例,您需要执行以下操作:
如果要格式化Integers:
> format (width 6 <> zeroFill) 123
"000123"
如果要格式化个数个
> format (width 6 <> zeroFill <> precision 1) 12.345
"0012.3"