Haskell: заставляет float иметь два десятичных знака

Используя следующий фрагмент кода:

(fromIntegral 100)/10.00

Используя стандартную прелюдию Haskell '98, как мне представить результат с двумя десятичными знаками?

Спасибо.

13.10.2009 11:15:48
Он должен быть представлен в виде строки. Т.е. 10.00.
Anders 13.10.2009 11:17:46
2 ОТВЕТА
РЕШЕНИЕ

Только для записи:

import Numeric 
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
55
24.02.2010 16:56:23
@NikitaVolkov Готово. Лучше поздно, чем никогда ;-)
Anders 19.10.2015 11:12:28

Вы можете использовать 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
23.11.2009 20:15:40
Я перефразирую вопрос :-) Я хочу вернуть строковое представление с плавающей точкой ровно с двумя десятичными числами, а не выводить его на стандартный вывод. Я не могу найти ничего конкретного о функции sprintf в Haskell, как я надеялся. Есть намеки?
Anders 13.10.2009 11:25:42
Попробуйте округлить, а затем распечатать поплавок?
Jared Updike 23.11.2009 19:50:44