Sử dụng đoạn mã sau:Haskell: Lực lượng nổi để có hai số thập phân
(fromIntegral 100)/10.00
Sử dụng các tiêu chuẩn mở đầu Haskell '98, làm thế nào để đại diện cho kết quả với hai số thập phân?
Cảm ơn.
Sử dụng đoạn mã sau:Haskell: Lực lượng nổi để có hai số thập phân
(fromIntegral 100)/10.00
Sử dụng các tiêu chuẩn mở đầu Haskell '98, làm thế nào để đại diện cho kết quả với hai số thập phân?
Cảm ơn.
Chỉ cần cho các hồ sơ:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
IMO câu trả lời này phải là câu trả lời được chấp nhận. –
@NikitaVolkov Xong. Muộn còn hơn không ;-) – Anders
Bạn có thể sử dụng printf :: PrintfType r => String -> r
từ 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
định dạng đối số thứ hai là một số dấu chấm động. %.2f
cho biết chỉ nên in hai chữ số sau dấu thập phân. \n
đại diện cho một dòng mới. Nó không hoàn toàn cần thiết cho ví dụ này.
Lưu ý rằng hàm này trả về một giá trị loại String
hoặc IO a
, tùy thuộc vào ngữ cảnh. Minh họa:
Prelude Text.Printf> printf "%.2f" (1337 :: Float) ++ " is a number"
"1337.00 is a number"
Trong trường hợp này printf
trả về chuỗi "1337.00"
, bởi vì kết quả được thông qua như là một cuộc tranh cãi để (++)
, mà là một chức năng mà hy vọng đối số danh sách (lưu ý rằng String
cũng giống như [Char]
). Như vậy, printf
cũng hoạt động như sprintf
sẽ bằng các ngôn ngữ khác. Tất nhiên một thủ thuật như phụ thêm một chuỗi thứ hai là không cần thiết. Bạn chỉ có thể chỉ định rõ kiểu dữ liệu:
Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: IO a
1337.00
Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: String
"1337.00\n"
Tôi sẽ thuật lại câu hỏi :-) Tôi muốn trả về một biểu diễn chuỗi của một phao với chính xác hai số thập phân - không in nó thành stdout. Tôi không thể tìm thấy bất cứ điều gì cụ thể về chức năng 'chạy nước rút' trong Haskell như tôi đã hy vọng. Bất kỳ gợi ý nào? – Anders
Điểm tốt. Tôi đã cập nhật câu trả lời của mình. – Stephan202
Thử làm tròn sau đó in nổi? –
Đó là nghĩa vụ phải được thể hiện dưới dạng một chuỗi. I E. 10.00. – Anders