And*_*ers 30 floating-point precision haskell
使用以下代码段:
(fromIntegral 100)/10.00
Run Code Online (Sandbox Code Playgroud)
使用Haskell '98标准前奏,如何用两位小数表示结果?
谢谢.
via*_*tic 54
仅供记录:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
Run Code Online (Sandbox Code Playgroud)
Ste*_*202 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
Run Code Online (Sandbox Code Playgroud)
%f将第二个参数格式化为浮点数.%.2f表示只应打印小数点后面的两位数字.\n代表换行符.这个例子并不是绝对必要的.
请注意,此函数返回值类型String或IO a取决于上下文.示范:
Prelude Text.Printf> printf "%.2f" (1337 :: Float) ++ " is a number"
"1337.00 is a number"
Run Code Online (Sandbox Code Playgroud)
在这种情况下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"
Run Code Online (Sandbox Code Playgroud)