我希望复合增长超过一年,但我不关心小数点,所以我尝试了
take 52 $ iterate (floor . (*1.1)) 100
问题是(floor . (*1.1))
的类型是Double -> Integer
,而迭代的第一个arg期望的类型是a -> a
。
我尝试了几种方法,但最终将自己捆绑在一起。
在函数应用程序中保持数字类型一致的首选解决方案是什么?
答案 0 :(得分:26)
将Int
转换为Double
的常用方法是使用fromIntegral
,其类型为(Integral a, Num b) => a -> b
。这意味着它会将Integral
类型(Int
和Integer
)转换为任何数字类型b
,其中Double
是一个实例。
您的情况听起来好像要将Double
转换为Int
,我建议您floor
,但您必须确保输入为{ {1}}。为此,您可以将Double
函数与
fromIntegral
但是,这会给您不准确的结果,因为您在每一步都截断了。我建议你做
take 52 $ iterate (floor . (* 1.1) . fromIntegral) 100