F#向上舍入到特定的小数位数

时间:2013-04-07 03:00:11

标签: f# rounding roundup

例如我可以使用System.Math.Round((float),2)将我的浮点数舍入到最接近的2位小数位,但无论如何在F#中我可以 向上舍入 我的浮到2位小数? 感谢

2 个答案:

答案 0 :(得分:3)

哈希解决方案的四舍五入

let round x d =
    let rounded = Math.Round(x,d)
    if rounded < x then x + Math.Pow(10,-d) else rounded

答案 1 :(得分:1)

向上舍入(严格向上,而不是远离零):

let roundUp x d = 
    Math.Round(x + Math.pow(10,-d)/2,d)

考虑舍入0.001到2dp。你想要这个舍入到0.01:

0.001 + 0.01/2 = 0.006
-> 2dp: 0.01

这是从截断中获得正常舍入的常用方法得出的;添加一半所需的精度和截断。然而,这会受到负数的影响,因此需要根据原始值的符号减去或添加增量。

请注意,如果您总是向上舍入,那么负数将向零舍入。在通常需要2dp的财务状况下,这是一个坏主意,因为0.021的余额四舍五入为0.03,但余额-0.021四舍五入为-0.02,无论您是在计算借方还是贷方,它都会变得很重要。如果你对称地做,例如总是远离零,那你再也不在乎了。