32

使用以下代码片段:

(fromIntegral 100)/10.00

使用 Haskell '98 标准前奏,我如何用两位小数表示结果?

谢谢。

4

2 回答 2

56

仅作记录:

import Numeric 
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
于 2010-02-24T16:56:23.130 回答
25

您可以使用printf :: PrintfType r => String -> r来自Text.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代表换行符。对于这个例子,它不是绝对必要的。

请注意,此函数根据上下文返回一个Stringor类型的值。IO 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"
于 2009-10-13T11:21:12.480 回答