【问题标题】:Haskell Converting Int to FloatHaskell 将 Int 转换为 Float
【发布时间】:2012-05-05 09:43:08
【问题描述】:

我在使用其中一个新功能时遇到问题,它是 fromIntegral 功能。

基本上我需要接受两个 Int 参数并返回数字的百分比,但是当我运行我的代码时,它一直给我这个错误:

代码:

percent :: Int -> Int -> Float
percent x y =   100 * ( a `div` b )
where   a = fromIntegral x :: Float
        b = fromIntegral y :: Float

错误:

No instance for (Integral Float)
arising from a use of `div'
Possible fix: add an instance declaration for (Integral Float)
In the second argument of `(*)', namely `(a `div` b)'
In the expression: 100 * (a `div` b)
In an equation for `percent':
    percent x y
      = 100 * (a `div` b)
      where
          a = fromIntegral x :: Float
          b = fromIntegral y :: Float

我阅读了 '98 Haskell 前奏曲,它说有一个名为 fromInt 的函数,但它从未起作用,所以我不得不这样做,但它仍然不起作用。救命!

【问题讨论】:

  • 我怀疑 98 报告声称有一个 fromInt。

标签: haskell floating-point int integral


【解决方案1】:

div的类型:

div :: Integral a => a -> a -> a

您不能将输入转换为Float,然后使用div

改用(/)

(/) :: Fractional a => a -> a -> a

以下代码有效:

percent :: Int -> Int -> Float
percent x y =   100 * ( a / b )
  where a = fromIntegral x :: Float
        b = fromIntegral y :: Float

【讨论】:

  • 哦,为大家加油,我一直在使用div,忘记查看替代方案了!我的错,再次感谢!
  • 为了简洁,不用强制类型:: Float
  • 使用Data.Function.on可以写percent x y = 100 * ((/) 'on' fromIntegral) x y(用反引号替换')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多