6

先頭にゼロを付けて 6 桁の数値を出力する必要があります。C または Java では"%06d"、これを行うためのフォーマット文字列として使用します。PureScript はフォーマット文字列をサポートしていますか? または、どうすればこれを達成できますか?

4

1 に答える 1

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

特定の例では、次のことを行う必要があります。

整数をフォーマットする場合:

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

Numberをフォーマットする場合

> format (width 6 <> zeroFill <> precision 1) 12.345
"0012.3"
于 2016-03-06T14:09:42.507 に答える