Wyz*_*a-- 29 floating-point haskell types integer
我想Int在Haskell中划分两个值并将结果作为a Float.我尝试这样做:
foo :: Int -> Int -> Float
foo a b = fromRational $ a % b
Run Code Online (Sandbox Code Playgroud)
但是GHC(版本6.12.1)告诉我"无法将预期类型'Integer'与推断类型'Int'相匹配"关于a表达式中的内容.
我理解为什么:fromRational调用需要(%)生成一个Ratio Integer,所以操作数需要是类型Integer而不是Int.但是我正在划分的值远远没有接近Int范围限制,因此使用任意精度的bignum类型似乎有点过分.
这样做的正确方法是什么?我应该只是打电话toInteger给我的操作数,还是有一种(%)我不了解的更好的方法(可能不涉及和比率)?
Dar*_*rio 36
您必须先将操作数转换为浮点数然后除以,否则您将执行整数除法(无小数位).
简明解决方案(需要Data.Function)
foo = (/) `on` fromIntegral
Run Code Online (Sandbox Code Playgroud)
这是短的
foo a b = (fromIntegral a) / (fromIntegral b)
Run Code Online (Sandbox Code Playgroud)
同
foo :: Int -> Int -> Float
Run Code Online (Sandbox Code Playgroud)