Ash*_*Ash 27 double haskell integer
每当我使用双精度和整数编写函数时,我发现这个问题,我不断在我的函数中到处使用'fromIntegral'.例如:
import Data.List
roundDouble
:: Double
-> Int
-> Double
roundDouble x acc = fromIntegral (round $ x * 10 ** fromIntegral acc) / 10 ** fromIntegral acc
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来写这个?(我知道可能有更简单的方法来舍入数字,如果有,请告诉我!但我主要感兴趣的是如何避免使用这么多'fromIntegrals'.)
谢谢,阿什
luq*_*qui 24
有时候我发现辅助函数很有用:
roundDouble x acc = (round $ x * 10 ^ acc) /. (10 ^ acc)
where
x /. y = fromIntegral x / fromIntegral y
Run Code Online (Sandbox Code Playgroud)
那个辅助函数也可以写成:
(/.) = (/) `on` fromIntegral
Run Code Online (Sandbox Code Playgroud)
on来自哪里Data.Function.
sep*_*p2k 12
你可以用^而不是**.^将任何积分作为第二个参数,因此您不需要调用fromIntegral第二个操作数.所以你的代码变成:
roundDouble x acc = fromIntegral(round $ x*10 ^ acc)/ 10 ^ acc
其中只有一个fromIntegral.那个你不能round自然地返回积分的那个,你不能在积分上执行非整数除法.