2009-10-13 28 views

回答

51

只是爲了記錄:

import Numeric 
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum "" 
+9

IMO這個答案應該是公認的答案。 –

+0

@NikitaVolkov完成。遲到總比不到好 ;-) – Anders

22

您可以使用printf :: PrintfType r => String -> rText.Printf

Prelude> import Text.Printf 
Prelude Text.Printf> printf "%.2f\n" (100 :: Float) 
100.00 
Prelude Text.Printf> printf "%.2f\n" $ fromIntegral 100/10.00 
10.00 

%f格式的第二個參數是一個浮點數。 %.2f表示應僅打印小數點後兩位數字。 \n代表換行符。這個例子並不是絕對必要的。

請注意,該函數根據上下文返回類型StringIO a的值。演示:

Prelude Text.Printf> printf "%.2f" (1337 :: Float) ++ " is a number" 
"1337.00 is a number" 

在這種情況下printf返回字符串"1337.00",因爲結果被作爲參數傳遞給(++),這是預計列表參數(注意String相同[Char])函數傳遞。因此,printf在其他語言中也會表現爲sprintf。當然,不需要附加第二個字符串等技巧。你可以明確地指定類型:

Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: IO a 
1337.00 
Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: String 
"1337.00\n" 
+2

我將重新說明這個問題:-) 我想返回一個正好具有兩個decimans的浮點數的字符串表示 - 不會將其輸出到stdout。我無法像希望的那樣在Haskell的'sprintf'函數中找到具體的東西。 任何提示? – Anders

+0

好點。我更新了我的答案。 – Stephan202

+0

嘗試四捨五入然後打印浮動? –