Haskell Converting Int to Float
24,158
Look at the type of div
:
div :: Integral a => a -> a -> a
You cannot transform your input to a Float
and then use div
.
Use (/)
instead:
(/) :: Fractional a => a -> a -> a
The following code works:
percent :: Int -> Int -> Float
percent x y = 100 * ( a / b )
where a = fromIntegral x :: Float
b = fromIntegral y :: Float
Author by
Syafiq Kamarul Azman
A bit of data, a bit of ML, a bit of web, a lot of confusion 😵💫
Updated on May 16, 2020Comments
-
Syafiq Kamarul Azman almost 4 years
I'm having some problem with one of the functions which I'm new at, it's the fromIntegral function.
Basically I need to take in two Int arguments and return the percentage of the numbers but when I run my code, it keeps giving me this error:
Code:
percent :: Int -> Int -> Float percent x y = 100 * ( a `div` b ) where a = fromIntegral x :: Float b = fromIntegral y :: Float
Error:
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
I read the '98 Haskell prelude and it says there is such a function called fromInt but it never worked so I had to go with this but it's still not working. Help!
-
Syafiq Kamarul Azman about 12 yearsOh, cheers for the heads up, I have been using
div
the whole time and forgot to look at the alternative! My bad, thanks again! -
rotskoff about 12 yearsFor concision, you don't need to force the type
:: Float
-
Landei about 12 yearsUsing
Data.Function.on
you can writepercent x y = 100 * ((/) 'on' fromIntegral) x y
(replace ' by backticks)