4

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

4

2 回答 2

4

四舍五入的黑客解决方案

let round x d =
    let rounded = Math.Round(x,d)
    if rounded < x then x + Math.Pow(10,-d) else rounded
于 2013-04-07T06:39:51.373 回答
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,并且计算借方还是贷方开始变得重要. 如果你对称地做它,例如总是远离零,那么你就不再关心了。

于 2013-04-10T14:34:28.903 回答