Haskell中的舍入到最近的函数

时间:2015-11-03 08:53:29

标签: haskell functional-programming rounding

我需要一个舍入到最接近的数字的函数,而不是舍入到偶数的默认值。我写了一个,但问题是我是Haskell的新手,我认为它有一些语法错误。有人可以帮帮我吗?谢谢。 这是我到目前为止编写的代码:

rounding a
    | (round a) - a > (-0.5) = round a 
    | otherwise = round a + 1

2 个答案:

答案 0 :(得分:3)

为什么不

rounding a = floor (a + 0.5)

答案 1 :(得分:2)

您正在混合从a中减去round a的类型(一个类型取决于rounding参数的类型,而另一个类型始终为Integral)。 round需要RealFrac,因此您应该从参数中获得最少的要求。与往常一样,我还建议将类型签名添加到rounding。以下显示了最简单的修复方式:

rounding a
    | (fromIntegral (round a)) - a > (-0.5) = round a
    | otherwise = round a + 1