2017-03-23 72 views
2

我在Haskell如何從浮動轉換爲int在Haskell

toInt :: Float -> Int 
toInt x = round $fromIntegral x 

寫了一個函數它應該採取的浮動並返回等價​​詮釋。我來自C編程背景,在C中,我們可以將它作爲(int)x來處理。

然而,在這種情況下,我得到以下編譯錯誤

No instance for (Integral Float) 
arising from a use of `fromIntegral' 
In the second argument of `($)', namely `fromIntegral x' 
In the expression: round $ fromIntegral x 
In an equation for `toInt': toInt x = round $ fromIntegral x 

關於如何解決此問題的任何想法?

+0

也許你可以試試這個'round 3.2 :: Int'。 – Aleph0

+1

如果你需要找到一個你知道這個類型的函數,比如'Float - > Int',那麼你可以在[Hayoo]上搜索該類型的函數(http://hayoo.fh-wedel.de/?query=浮動+ - %3E +詮釋)或[Hoogle](https://www.haskell.org/hoogle/?hoogle=Float+-%3E+Int+%2bbase&start=41#more) – Redu

回答

4

您的類型註釋指定x應該是Float,這意味着它不能是fromIntegral的參數,因爲該函數採用積分。

你可以,而不是僅僅通過xround

toInt :: Float -> Int 
toInt x = round x 

這反過來又可以瘦身到:

toInt :: Float -> Int 
toInt = round 

這意味着你可能會更好只使用round開始與,除非你有一些專門的四捨五入方法。

+0

工作,謝謝。有人告訴我哈斯克爾解決方案後,我感到非常無聊 –