如何在Haskell中从Float转换为Int

时间:2017-03-23 11:45:29

标签: haskell type-conversion

我在Haskell中编写了一个函数

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

它应该接受一个Float并返回等效的Int。我来自C编程背景,在C中,我们可以将其转换为int。

但是,在这种情况下,我得到以下编译错误

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

有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:8)

您的类型注释指定x应该是Float,这意味着它不能成为fromIntegral的参数,因为该函数需要积分。

您可以将x传递给round

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

反过来可以减少到:

toInt :: Float -> Int
toInt = round

这意味着你可能最好只使用round开头,除非你有一些特殊的舍入方式。