我想分两份Int
Haskell 中的值并获得结果Float
。我尝试这样做:
foo :: Int -> Int -> Float
foo a b = fromRational $ a % b
但 GHC(版本 6.12.1)告诉我“无法将预期类型“Integer”与推断类型“Int”匹配”a
在表达式中。
我明白为什么:fromRational
调用需要(%)
生产一个Ratio Integer
,所以操作数必须是类型Integer
而不是Int
。但我所划分的值远不及Int
范围限制,因此使用任意精度的 bignum 类型似乎有点矫枉过正。
这样做的正确方法是什么?我应该打电话吗toInteger
在我的操作数上,或者是否有更好的方法(也许不涉及(%)
和比率)我不知道?
您必须将操作数转换为浮点数first然后除法,否则您将执行整数除法(没有小数位)。
简洁的解决方案(需要Data.Function
)
foo = (/) `on` fromIntegral
这是缩写
foo a b = (fromIntegral a) / (fromIntegral b)
with
foo :: Int -> Int -> Float
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)