2015-10-19 120 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