2013-03-22 24 views
15

Haskell'de sprintf eşdeğeri var mı?Haskell printf - String

Çift değerlerini Dize ile dönüştürmem gerekiyor, bu nedenle, printf tür işlevleri kullanmadan başka bir yol var mı?

Prelude> putStrLn myDoubleVal 
1.7944444444444447e-2 

senin ihtiyacın olduğu olabileceğini yerine

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

cevap

39

Evet, Text.Printf modülünde ve yalnızca printf olarak adlandırıldı. (yukarıda örnekte olduğu gibi), bir String dönen yeteneğine ama aynı zamanda baskı yapan bir I/O işlemi dönen yeteneğine, yani böylece printf dönüş türü, aşırı olduğunu

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

Not aslında putStrLn çağrısını gerekmez:

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

İşaretli, ben aynı işlevi ile IO ve dize hem yazdırır bilmiyordum. – Zhen

+2

Sistem sihrini yazın :) –

+3

@Zhen Tip güvenli bir versiyon ilginizi çekebilir: http://hpaste.org/79643 E.g. biçim (str. "-". str. "/". int) "Merhaba!" "Dünya!" 123 –