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