在Haskell中将整数转换为Double

Pau*_*rey 25 haskell numbers

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

take 52 $ iterate (floor . (*1.1)) 100
Run Code Online (Sandbox Code Playgroud)

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

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

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

bhe*_*ilr 29

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

你的情况听起来好像要到转换Double到一个Int,我会建议floor的,但你必须确保你的输入是Double.为此,您可以使用该fromIntegral功能

take 52 $ iterate (floor . (* 1.1) . fromIntegral) 100
Run Code Online (Sandbox Code Playgroud)

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

take 52 $ map floor $ iterate (* 1.1) $ fromIntegral 100
Run Code Online (Sandbox Code Playgroud)

  • 等价地写成:`拿52.地图.迭代(*1.1).fromIntegral $ 100` (3认同)