使用以下代码段:
(fromIntegral 100)/10.00
使用Haskell '98标准前奏,我如何用两位小数表示结果?
感谢。
答案 0 :(得分:53)
仅供记录:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
答案 1 :(得分:24)
您可以使用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
代表换行符。这个例子并不是绝对必要的。
请注意,此函数返回类型String
或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"