2013-03-22 15 views
15

Gibt es das Sprintf-Äquivalent in Haskell?Haskell printf zu String

Ich muss mit Format konvertieren Double-Werte in String, also, gibt es einen anderen Weg ohne printf Art von Funktionen.

Das Hauptproblem ist zu vermeiden:

Prelude> putStrLn myDoubleVal 
1.7944444444444447e-2 

Ich möchte stattdessen

Prelude> putStrLn . sprintf "%.2f" $ myDoubleVal 
1.79 

Antwort

39

Ja, es ist in der Text.Printf-Modul, und es heißt nur printf.

> import Text.Printf 
> let x = 1.14907259 
> putStrLn . printf "%.2f" $ x 
1.15 

Beachten Sie, dass der Rückgabetyp von printf überlastet, so dass sie eine String der Rückkehr der Lage ist (wie im Beispiel oben), aber es ist auch in der Lage eine I/O-Aktion der Rücksendung, die den Druck der Fall ist, so dass Sie nicht wirklich brauchen, den Anruf zu putStrLn:

> printf "%.2f\n" x 
1.15 
+2

Karo, ich wusste nicht, dass sowohl IO und String mit der gleichen Funktion druckt. – Zhen

+2

Typ System Magie :) –

+3

@Zhen Eine typsichere Version könnte von Interesse sein: http://hpaste.org/79643 format (str. "-". str. "/". int) "Hallo!" "Welt!" 123 –