将两个 Int 值相除以获得 Float 的正确方法是什么?
我想在 Haskell 中除以两个 Int
值并获得 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
吗?还是有一种我不知道的更好的方法(也许不涉及 (%)
和比率)?
I'd like to divide two Int
values in Haskell and obtain the result as a Float
. I tried doing it like this:
foo :: Int -> Int -> Float
foo a b = fromRational $ a % b
but GHC (version 6.12.1) tells me "Couldn't match expected type 'Integer' against inferred type 'Int'" regarding the a
in the expression.
I understand why: the fromRational
call requires (%)
to produce a Ratio Integer
, so the operands need to be of type Integer
rather than Int
. But the values I'm dividing are nowhere near the Int
range limit, so using an arbitrary-precision bignum type seems like overkill.
What's the right way to do this? Should I just call toInteger
on my operands, or is there a better approach (maybe one not involving (%)
and ratios) that I don't know about?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须首先将操作数转换为浮点数,然后进行除法,否则您将执行整数除法(没有小数位)。
简洁的解决方案(需要
Data.Function
),缩写
它是with 的
You have to convert the operands to floats first and then divide, otherwise you'll perform an integer division (no decimal places).
Laconic solution (requires
Data.Function
)which is short for
with