簡體   English   中英

將IO的Double舍入為指定位數-Haskell

[英]Round IO Double to specified number of digits - Haskell

有辦法舍入IO Double嗎? 我在尋找一個功能:

ownRound :: IO Double -> IO Double

這些單元測試:

ownRound 0.51 == 0.5
ownRound 0.49 == 0.5
ownRound 0.5 == 0.5
ownRound 0.7132 == 0.7
ownRound 0.39 == 0.4

您所要的東西無法滿足。 您編寫的測試用例用於該功能

tensRound :: Double -> Double

但是您編寫的類型簽名用於該功能

ownRound :: IO Double -> IO Double

如果您打算將測試用例編寫為

ownRound (return 0.51) == return 0.5
ownRound (return 0.49) == return 0.5

依此類推,將每個數字都包裝到IO中,那么這些實現將起作用:

tensRound :: Double -> Double
tensRound d = fromInteger (round (d*10)) / 10

ownRound :: IO Double -> IO Double
ownRound = fmap tensRound

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM