【发布时间】:2013-04-07 03:00:11
【问题描述】:
例如,我可以使用System.Math.Round((float),2)将浮点数四舍五入到最接近的小数点后 2 位,但无论如何在 F# 中我可以四舍五入我的浮点数2位小数?
谢谢
【问题讨论】:
例如,我可以使用System.Math.Round((float),2)将浮点数四舍五入到最接近的小数点后 2 位,但无论如何在 F# 中我可以四舍五入我的浮点数2位小数?
谢谢
【问题讨论】:
四舍五入的黑客解决方案
let round x d =
let rounded = Math.Round(x,d)
if rounded < x then x + Math.Pow(10,-d) else rounded
【讨论】:
Math.Round x 3,但它抛出了一个错误。 IDK 为什么!但是这个解决方案解决了我的问题。
向上取整(严格向上,而不是从零开始):
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,并且计算借方还是贷方开始变得重要.如果你对称地做,例如总是远离零,那么你就不再关心了。
【讨论】: