我想在一年内实现复合增长,但我不在乎小数点,所以我尝试了
take 52 $ iterate (floor . (*1.1)) 100
问题是
(floor . (*1.1))
的类型是 Double -> Integer
, 而 iterate 的第一个 arg 所期望的类型是 a -> a
.我尝试了几种方法,但最终把自己打成结。
在函数应用程序中保持数字类型一致的首选解决方案是什么?
最佳答案
转换 Int
的常用方法到 Double
是使用fromIntegral
,其类型为 (Integral a, Num b) => a -> b
.这意味着它转换了 Integral
类型( Int
和 Integer
)到任何数字类型 b
,其中Double
是一个实例。
您的情况听起来像是要转换 Double
到 Int
,我会推荐 floor
为,但您必须确保您的输入是 Double
.为此,您可以使用 fromIntegral
功能与
take 52 $ iterate (floor . (* 1.1) . fromIntegral) 100
但是,这会给您带来不准确的结果,因为您在每一步都进行了截断。我建议做
take 52 $ map floor $ iterate (* 1.1) $ fromIntegral 100
关于haskell - 在 Haskell 中将整数转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280844/