Преобразуйте haskell Int с начальным нулем в строку
Вопрос
Предположим, у меня есть переменная типа Int = 08, как я могу преобразовать ее в строку с сохранением начального нуля?
Например:
v :: Int
v = 08
show v
Выходной сигнал:8
Я хочу, чтобы на выходе было "08".
Возможно ли это?
Решение
В зависимости от того, что вы планируете делать, вы можете сохранить "08" в виде строки и преобразовывать в int только тогда, когда вам нужно значение.
Другие советы
Использование Text.Printf.printf
:
printf "%02d" v
Обязательно импортируйте Text.Printf.printf
Первый.
Это 8, а не 08 в переменной v.Да, вы назначили ему 08, но он получает 8.Вот в чем причина показать метод отобразил его как 8.Вы можете использовать обходной путь, предложенный Мипади.
Редактировать:
Вывод теста.
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
В 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"