将IO双精度舍入到指定的位数-Haskell
是否有一种方法可以将将IO双精度舍入到指定的位数-Haskell,haskell,rounding,monads,Haskell,Rounding,Monads,是否有一种方法可以将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
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
但是您编写的类型签名是针对函数的
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
你所要求的东西无法得到。您编写的测试用例是针对函数的
tensRound :: Double -> Double
ownRound :: IO Double -> IO Double
但是您编写的类型签名是针对函数的
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
你所要求的东西无法得到。您编写的测试用例是针对函数的
tensRound :: Double -> Double
ownRound :: IO Double -> IO Double
但是您编写的类型签名是针对函数的
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
你所要求的东西无法得到。您编写的测试用例是针对函数的
tensRound :: Double -> Double
ownRound :: IO Double -> IO Double
但是您编写的类型签名是针对函数的
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
fmap::(a->b)->(IO a->IO b)
是可能的。@AJFarmar,是的,我明白了。fmap:(a->b)->(IO a->IO b)
是可能的。@AJFarmar,是的,我明白了。fmap::(a->b)
我明白了。fmap::(a->IO a->IO b)
是的。@AJFarmar,是的,我明白了。