можно также проверить J# redist. Это повторно реализует java.util.zip. Статья
Просто для записи:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
Вы можете использовать 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"