Конвертировать haskell Int с ведущим нулем в String - PullRequest
8 голосов
/ 18 декабря 2008

Предположим, у меня есть переменная типа Int = 08, как я могу преобразовать ее в String, сохраняя ведущий ноль?

Например:

v :: Int
v = 08

show v

Выход: 8

Я хочу, чтобы вывод был "08".

Возможно ли это?

Ответы [ 4 ]

21 голосов
/ 18 декабря 2008

Использование Text.Printf.printf:

printf "%02d" v

Сначала убедитесь, что импортировали Text.Printf.printf.

8 голосов
/ 18 декабря 2008

8, а не 08 в переменной v . Да, вы присвоили ему 08, но он получает 8. По этой причине метод show отображает его как 8. Вы можете использовать обходной путь, данный Mipadi .

Edit:

Вывод теста.

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"

Надеюсь, вы поняли.

Edit:

Найден другой обходной путь. Попробуйте это,

"0" ++ show v
3 голосов
/ 18 декабря 2008

В зависимости от того, что вы планируете делать, вы можете сохранить «08» в виде строки и конвертировать в int только тогда, когда вам нужно значение.

1 голос
/ 03 декабря 2015

Возможно, лучше использовать 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...