回答
只是爲了記錄:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
IMO這個答案應該是公認的答案。 –
@NikitaVolkov完成。遲到總比不到好 ;-) – Anders
您可以使用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"
我將重新說明這個問題:-) 我想返回一個正好具有兩個decimans的浮點數的字符串表示 - 不會將其輸出到stdout。我無法像希望的那樣在Haskell的'sprintf'函數中找到具體的東西。 任何提示? – Anders
好點。我更新了我的答案。 – Stephan202
嘗試四捨五入然後打印浮動? –
- 1. 強制執行嚴格哈斯克爾
- 2. 極小哈斯克爾
- 3. 哈斯克爾
- 4. 哈斯克爾
- 5. 哈斯克爾
- 6. 哈斯克爾2小數點
- 7. 哈斯克爾從浮到雙
- 8. 哈斯克爾負十進制數
- 9. 哈斯克爾篩素數
- 10. 在哈斯克爾
- 11. 在哈斯克爾
- 12. 在哈斯克爾
- 13. Control.Monad.Writer哈斯克爾
- 14. 哈斯克爾 - div`
- 15. 在哈斯克爾
- 16. Control.Monad.State哈斯克爾
- 17. zipWith哈斯克爾
- 18. 在哈斯克爾
- 19. 哈斯克爾Monad.Writer
- 20. 哈斯克爾 - 布爾RoseTree
- 21. 哈斯克爾readsPrec有理函數
- 22. 增加兩個哈斯克爾
- 23. 哈斯克爾:最大/最小功能
- 24. 小哈斯克爾libClang的例子?
- 25. 哈斯克爾:讀一個數字(整數或浮點數)
- 26. 哈斯克爾錄音功能限制
- 27. 控制陣列填寫哈斯克爾
- 28. 建議導出機制哈斯克爾
- 29. 哈斯克爾,乘以INT和函數內浮動
- 30. 行爲哈斯克爾
它應該被表示爲一個字符串。即10.00。 – Anders