Convertir Int haskell avec zéro à cordes
Question
Supposons que j'ai une variable de type Int = 08, comment puis-je convertir en chaîne en gardant le zéro?
Par exemple:
v :: Int
v = 08
show v
Sortie: 8
Je veux que la sortie soit "08".
Est-ce possible?
La solution
En fonction de ce que vous envisagez de faire vous pouvez stocker le « 08 » comme une chaîne et convertir seulement int quand vous avez besoin de la valeur.
Autres conseils
Utilisation Text.Printf.printf
:
printf "%02d" v
Assurez-vous d'importer Text.Printf.printf
d'abord.
Son 8, pas 08 dans la variable v . Oui, vous lui avez attribué 08 mais il reçoit 8. Cest la raison pour show méthode, il apparaît comme 8. Vous pouvez utiliser le travail autour donné par Mipadi .
Modifier
Sortie d'un test.
Prelude> Text.Printf.printf "%01d\n" 08
8
Prelude> Text.Printf.printf "%02d\n" 08
08
Prelude> Text.Printf.printf "%03d\n" 08
008
sortie d'un autre test.
Prelude> show 08
"8"
Prelude> show 008
"8"
Prelude> show 0008
"8"
J'espère que vous obtenez le point.
Modifier
Trouver une autre solution de contournement. Essayez ceci,
"0" ++ show v
La façon de printf
est probablement le meilleur, mais il est assez facile d'écrire votre propre fonction:
show2d :: Int -> String
show2d n | length (show n) == 1 = "0" ++ (show n)
| otherwise = show n
fonctionne comme suit:
Prelude> show2d 1
"01"
Prelude> show2d 10
"10"
Prelude> show2d 100
"100"