10

我在使用其中一个新功能时遇到了一些问题,它是 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 的函数,但它从未起作用,所以我不得不这样做,但它仍然不起作用。帮助!

4

2 回答 2

21

查看类型div

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

您不能将输入转换为 aFloat然后使用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
于 2012-04-24T17:55:30.537 回答
0

或者你可以做

precent :: Int -> Int -> Float
percent x y = 100 * ( int(a) / int(b) ) 
  where int = fromIntegral
于 2022-02-27T00:01:12.047 回答