Haskell: Сила плавает, чтобы иметь два десятичных числа

можно также проверить J# redist. Это повторно реализует java.util.zip. Статья

30
задан viaclectic 16 September 2010 в 17:05
поделиться

2 ответа

Просто для записи:

import Numeric 
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
54
ответ дан 27 November 2019 в 23:20
поделиться

Вы можете использовать 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"
24
ответ дан 27 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: