2015-10-19 109 views
0

我有一个必须返回一个Int的函数,但是我需要使用局部定义来查找三个参数的平均值;这样的:Haskell:将Float转换为Int(平均值)

avg = (a + b + c)/3 

然而,这当然是返回一个浮点数,我怎么转换结果成一个int(或者更具体地说一轮向上或向下)?

+0

[''round','ceiling'或'floor'](https://hackage.haskell.org/package/base-4.8.1.0/docs/Prelude.html#v:round);)(或使用''div'而不是'(/)') – Carsten

回答

2

因为我评论,你可以使用round, ceiling or floor这样的:

avg :: Integral a => a -> a -> a -> Int 
avg a b c = round $ fromIntegral (a+b+c)/3 

,或者您可以使用div,而不是(这将截断向负无穷...):

avg' :: Integral a => a -> a -> a -> a 
avg' a b c = (a+b+c) `div` 3 

,如果你想不同的输入类型可能不得不使用其他转换,但我无法从您的问题中得知。

+0

我不太清楚如何实现这些到我的场景中,基本上我想输入三个int值,计算它们的平均值并使用警卫来确定有多少值高于他们的平均值(可以是两个或一个),并且我使用局部定义avg =(a + b + c)/ 3来尝试并计算所述平均值并将其用于警卫中。 – Ona

+0

我得到这个错误 http://puu.sh/kPM69/eaff7543f6.png – Ona

+1

对不起我的坏...你必须使用'avg = round(fromIntegral(a + b + c)/ 3)'in这种情况下 – Carsten