www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Brewer

Gepostet:
30.03.2010 16:05

Int -> String mit vorangestellten Nullen  
Der Titel sagts ja schon.
Ich möchte eine Integer in einen String umwandeln, beispielsweise:
007 -> "007"

Wenn ich es mit show versuche, dann werden die Nullen abgeschnitten.
Ein "00" ++ show 007 will ich nicht.

Ich bin mir sicher es gibt eine elegante Lösung, nur hab ich weder in der Referenz was gefunden, noch in diesem bzw. anderen Foren.

Danke im Voraus.
Zum Seitenanfang    
 
XeZZ

Gepostet:
30.03.2010 17:22

   
Mh was denn gegen deine eigene Lösung einzuwenden? Wenn du abhängig davon wieviele Stellen die Zahl selbst bereits hat kannst du ne Funktion machen die dir einfach deine Zahl in einen String umwandelt und dann mit '0':String solange 0 anhängt bis du die gewünschte Länge hast.
Zum Seitenanfang ICQ    
 
Siracusa

Gepostet:
30.03.2010 20:15

   
Das Prinzip von XeZZ ist auch die einzige Möglichkeit die ich sehe. Denn wenn du im Quellcode 007 schreibst, wird das ja intern in eine 7 umgewandelt, die Nullen davor werden verworfen. Und das show gibt die Zahl dann sozusagen in Normalform als String zurück. show (-(-(-7))) gibt bspw. auch nicht drei Minus-Zeichen zurück, sondern nur eins.

Im Modul Text.Printf gibt es allerdings eine printf-Funktion, die dürfte das mit den führenden Nullen auch können.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Brewer

Gepostet:
31.03.2010 03:00

   
Leider bringt mich Text.Printf nicht weiter. Das will mir einfach meine Nullen nicht gönnen.
Sieht wohl so aus als ob ich die Nullen doch eigenhändig ranhängen muss.

Obwohl ich ja immer noch verwirrt bin. In die andere Richtung, also String -> Integer, funkioniert es ja.
printf "%s\n" "007" -> 007
putStrLn "007" -> 007


Danke Euch.
Brewer
Zum Seitenanfang    
 
XeZZ

Gepostet:
31.03.2010 14:13

   
Naja wenn du "007" ausgeben lässt wird es ja als String behandelt. Sobald dus aber als Integer speicherst werden auch hier die Nullen abgeschnitten. Du kommst also auf keinen Fall drum rum die selbst anzuhängen solange die Zahlen als Int gespeichert wurden.
Zum Seitenanfang ICQ    
 
Siracusa

Gepostet:
31.03.2010 17:59

   
Also printf "%03d" 7 funktioniert und liefert 007, d.h. 0 für "mit Nullen auffüllen", 3 für insgesamt drei Stellen und d für eine Dezimalzahl. Und putStrLn wandelt dein Ergebnis nicht in ein Int um, das sieht nur im GHCi so aus! Du kannst den Ergebnistyp von einem Ausdruck testen, wenn du im GHCi vor den Ausdruck :t eingibst. Wenn du von String nach Int umwandeln will brauchst du read/reads o.ä.
Zum Seitenanfang