Haskell将Int转换为Float

Sya*_*man 5 floating-point int haskell integral

我对其中一个新功能有一些问题,它是fromIntegral函数.

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

码:

percent :: Int -> Int -> Float
percent x y =   100 * ( a `div` b )
where   a = fromIntegral x :: Float
        b = fromIntegral y :: Float
Run Code Online (Sandbox Code Playgroud)

错误:

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
Run Code Online (Sandbox Code Playgroud)

我读了'98 Haskell的前奏,它说有一个叫fromInt的函数,但它从来没有用过,所以我不得不接受它,但它仍然没有用.救命!

Nic*_*out 15

看看的类型div:

div :: Integral a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

您无法将输入转换为a Float然后使用div.

(/)改为使用:

(/) :: Fractional a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

以下代码有效:

percent :: Int -> Int -> Float
percent x y =   100 * ( a / b )
  where a = fromIntegral x :: Float
        b = fromIntegral y :: Float
Run Code Online (Sandbox Code Playgroud)