分割两个Int值以获得Float的正确方法是什么?

时间:2010-07-18 10:48:45

标签: haskell types floating-point integer

我想在Haskell中划分两个Int值并将结果作为Float获得。我尝试这样做:

foo :: Int -> Int -> Float
foo a b = fromRational $ a % b

但GHC(版本6.12.1)告诉我“无法将预期类型'整数'与推断类型'Int'相匹配”关于表达式中的a

我理解为什么:fromRational调用需要(%)来生成Ratio Integer,因此操作数必须是Integer而不是Int。但是我正在划分的值远远超出Int范围限制,因此使用任意精度的bignum类型似乎有点矫枉过正。

这样做的正确方法是什么?我应该在我的操作数上调用toInteger,还是有更好的方法(可能不涉及(%)和比率)我不知道?

1 个答案:

答案 0 :(得分:35)

您必须将操作数转换为浮点数首先然后除以,否则您将执行整数除法(无小数位)。

Laconic解决方案(需要Data.Function

foo = (/) `on` fromIntegral

的缩写
foo a b = (fromIntegral a) / (fromIntegral b)

foo :: Int -> Int -> Float