10

私が初めて使用する関数の 1 つで問題が発生しています。それは fromIntegral 関数です。

基本的に、2 つの 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 prelude を読んだところ、fromInt という関数があると書かれていましたが、機能しなかったので、これを使用する必要がありましたが、まだ機能していません。ヘルプ!

4

2 に答える 2

21

のタイプを見てください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
于 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 に答える