2008-12-18 9 views
8

Angenommen, ich habe eine Variable vom Typ Int = 08, wie kann ich dies in String konvertieren, die führende Null?Convert haskell Int mit führender Null zu String

Zum Beispiel:

v :: Int 
v = 08 

show v 

Ausgang: 8

Ich möchte die Ausgabe "08" sein.

Ist das möglich?

+0

Ops, der Ausgang ist eigentlich "8", nicht mehr als 8 –

+1

Ähm, Sprichwort v = 08 ist das gleiche wie v = 8 oder v = 008 oder v = 0000008. Es gibt keine Möglichkeit, die Information zurückzubekommen, wie viele Nullen du benutzt hast. Sie können es nur mit einer bestimmten Anzahl von 0s drucken, wie in der Antwort unten. – ShreevatsaR

Antwort

3

Je nachdem, was Sie planen, was Sie tun könnten, die „08“ als String gespeichert werden soll und nur konvertieren int wenn Sie den Wert benötigen.

+4

importieren Doing Gegenteil klingt besser. Speichern Sie es als int und ändern Sie es für die Anzeige in eine Zeichenfolge. –

19

Verwendung Text.Printf.printf:

printf "%02d" v 

Stellen Sie sicher, Text.Printf.printf zuerst zu importieren.

+0

es ist nur 'Import Text.Printf' – cevaris

+2

Oder' Text.Printf (printf) '' –

8

Seine 8, nicht 08 in Variable v. Ja, Sie haben es 08 zugewiesen, aber es erhält 8. Das ist der Grund, zeigt Methode angezeigt es als 8. Sie können the work around given by Mipadi verwenden.

Edit:

Ausgang eines Tests.

Prelude> Text.Printf.printf "%01d\n" 08 
8 
Prelude> Text.Printf.printf "%02d\n" 08 
08 
Prelude> Text.Printf.printf "%03d\n" 08 
008 

Ausgabe eines anderen Tests.

Prelude> show 08 
"8" 
Prelude> show 008 
"8" 
Prelude> show 0008 
"8" 

Ich hoffe, Sie bekommen den Punkt.

Edit:

eine andere Abhilfe gefunden. Versuchen Sie dieses,

"0" ++ show v 
1

Der printf Weg ist wahrscheinlich am besten, aber es ist einfach genug, um Ihre eigene Funktion zu schreiben:

show2d :: Int -> String 
show2d n | length (show n) == 1 = "0" ++ (show n) 
     | otherwise = show n 

funktioniert wie folgt:

Prelude> show2d 1 
"01" 
Prelude> show2d 10 
"10" 
Prelude> show2d 100 
"100"