Мне нужно вывести число с ведущими нулями и как шесть цифр. В C или Java я бы использовал "%06d"
в качестве строки формата для этого. Поддерживает ли PureScript строки формата? Или как мне этого добиться?
Поддерживает ли PureScript «строки формата», такие как C/Java и т. д.?
Ответы (1)
Я не знаю ни одного модуля, который поддерживал бы функциональность в стиле printf в PureScript. Было бы очень неплохо иметь типобезопасный способ форматирования чисел.
А пока я бы написал что-то вроде этого:
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"
person
shark.dp
schedule
06.03.2016
На самом деле я начал работать над библиотекой для поддержки этого: github.com/sharkdp/purescript-format а>
- person shark.dp; 06.03.2016
Круто, посмотрю повнимательнее, что ты там делаешь с Monoid и Semigroup. Кстати, ваше решение выше является более общим, чем то, которое я написал сам вчера ???? Я все еще пытаюсь освоить PureScript (строгий, нет (:) для деструктуризации массива в рекурсии, тип данных
Tuple
вместо (,)
, и еще несколько вещей).
- person 0dB; 06.03.2016
Я выпустил первую версию формата purescript. Я обновил свой ответ соответственно. Экземпляр Semigroup/Monoid для свойств используется только для простого их объединения.
- person shark.dp; 06.03.2016
Да, я видел это, определив
append
и предоставив «пустое» значение по умолчанию. Сиэт гут аус ????
- person 0dB; 06.03.2016