2016-05-13 159 views
1

我有一個函數,需要一個雙作爲輸入,但我必須通過一個INT它,它給了我這個錯誤:如何轉換Int至Double?

沒有實例爲(Fractional Int)由於使用'/ 「

這裏是我的功能:

foo1 :: Int -> Int 
foo1 x1 = foo2 (x1 + 1) 

foo2 :: Double -> Int 
foo2 x = round (((3244325 * x^343)/2352352656) - ((3432 * x^234)/45324645500) + ((23453 * x^21)/2534743435) 

我不知道如何解決這個問題。

是否像下面存在:

foo1 :: Int -> Int 
foo1 x1 = foo2 $ convertToDouble $ (x1 + 1) 
+0

我不知道哈斯克爾,但我找到了這個;檢查是否有幫助:「將Int轉換爲Double的常用方法是使用fromIntegral,它具有類型(Integral a,Num b)=> a - > b。這意味着它將Integral類型(Int和整數)到任何數字類型b,其中Double是一個實例。「 –

回答

3

使用fromIntegral

(Integral a, Num b) => a -> b 

將整型(即一個Int,整型等)轉換爲另一種編號類型。

+0

沒有直觀的名字haha – user6005857

+2

@ user6005857爲什麼?你可能只是用*來表示你想去的地方,而不是你來自哪裏 - 但是當編譯器知道目標已經... – Carsten

+0

是的,這很有道理。 – user6005857