使用下面的代码片段:
(fromIntegral 100)/10.00
使用Haskell '98标准预定义函数,我该如何将结果表示为两位小数?
谢谢。
使用下面的代码片段:
(fromIntegral 100)/10.00
使用Haskell '98标准预定义函数,我该如何将结果表示为两位小数?
谢谢。
仅供记录:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
您可以使用来自Text.Printf
的printf :: PrintfType r => String -> r
:
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"