代码之家  ›  专栏  ›  技术社区  ›  Wyzard

用两个Int值除以一个Float的正确方法是什么?

  •  28
  • Wyzard  · 技术社区  · 15 年前

    Int 值,并将结果作为 Float . 我试着这样做:

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

    但是GHC(版本6.12.1)告诉我关于 a 在表达式中。

    fromRational 呼叫需要 (%) 生产 Ratio Integer Integer 而不是 内景 . 但我所划分的价值观远未达到 内景 范围限制,所以使用任意精度的bignum类型似乎有点过分了。

    toInteger 在我的操作数上,或者有没有更好的方法(可能不涉及 和比率),我不知道?

    1 回复  |  直到 14 年前
        1
  •  37
  •   Dario    15 年前

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

    Data.Function )

    foo = (/) `on` fromIntegral
    

    foo a b = (fromIntegral a) / (fromIntegral b)
    

    具有

    foo :: Int -> Int -> Float