在Haskell中将整数转换为Double

时间:2013-08-16 19:35:28

标签: haskell numbers

我希望复合增长超过一年,但我不关心小数点,所以我尝试了

take 52 $ iterate (floor . (*1.1)) 100

问题是(floor . (*1.1))的类型是Double -> Integer,而迭代的第一个arg期望的类型是a -> a

我尝试了几种方法,但最终将自己捆绑在一起。

在函数应用程序中保持数字类型一致的首选解决方案是什么?

1 个答案:

答案 0 :(得分:26)

Int转换为Double的常用方法是使用fromIntegral,其类型为(Integral a, Num b) => a -> b。这意味着它会将Integral类型(IntInteger)转换为任何数字类型b,其中Double是一个实例。

您的情况听起来好像要将Double转换为Int,我建议您floor,但您必须确保输入为{ {1}}。为此,您可以将Double函数与

一起使用
fromIntegral

但是,这会给您不准确的结果,因为您在每一步都截断了。我建议你做

take 52 $ iterate (floor . (* 1.1) . fromIntegral) 100