Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中整数到双精度的转换_Haskell_Numbers - Fatal编程技术网

Haskell中整数到双精度的转换

Haskell中整数到双精度的转换,haskell,numbers,Haskell,Numbers,我想在一年内实现复合增长,但我不在乎小数点,所以我尝试了 take 52 $ iterate (floor . (*1.1)) 100 问题是(floor(*1.1))的类型是Double->Integer,而iterate的第一个参数所期望的类型是a->a 我尝试了两种方法,但最后把自己弄得一团糟 保持函数应用程序中数值类型一致的首选解决方案是什么?将Int转换为Double的常用方法是使用fromIntegral,其类型为(Integral a,Num b)=>a->b。这意味着它将整数类

我想在一年内实现复合增长,但我不在乎小数点,所以我尝试了

take 52 $ iterate (floor . (*1.1)) 100
问题是
(floor(*1.1))
的类型是
Double->Integer
,而iterate的第一个参数所期望的类型是
a->a

我尝试了两种方法,但最后把自己弄得一团糟


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

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

您的案例听起来像是要将
Double
转换为
Int
,我建议您使用
floor
,但您必须确保您的输入是
Double
。为此,您可以将
fromIntegral
函数用于

取52$iterate(floor.(*1.1).from integral)100
然而,这会给你不准确的结果,因为你在每一步都要截断。我建议你这样做

从整数100中提取52$map floor$iterate(*1.1)$

你不能一直把中间结果四舍五入,希望在最后得到正确的答案。为什么不将
楼层
移出
迭代
并绘制
楼层地图。以52$…
?@Fixnum fair point为例,当我遇到这个问题时,这正是我试图在ghci中运行的东西。我还要补充的是,后一个表达式会稍微快一些,因为
from integral
只执行一次,
(*1.1)
仍在重复,而
floor
只执行必要的次数,虽然可以将
map floor
take 52
转换为一个参数,但等价地写为:
take 52。地图楼层。迭代(*1.1)。从整数$100开始