2012-04-24 68 views
4

我遇到了一些问题,我新来的一个函数是fromIntegral函数。Haskell将Int转换为Floating

基本上我需要采取两个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,但它从来没有工作,所以我不得不这样做,但它仍然无法正常工作。帮帮我!

+1

我怀疑98报告称有一个fromInt。 – augustss 2012-04-24 18:04:33

回答

13

看的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 
+0

呵呵,为大家欢呼,我一直在使用'div',忘了看看替代方案!我的坏,再次感谢! – 2012-04-24 22:48:45

+1

为简洁起见,您不需要强制使用类型':: Float' – rotskoff 2012-04-25 01:45:26

+0

使用'Data.Function.on',您可以在'fromIntegral)xy'上写'percent xy = 100 *((/)'(将'通过反引号) – Landei 2012-04-25 09:31:50