F#四舍五入到特定的小数位数
例如,我可以使用F#四舍五入到特定的小数位数,f#,rounding,roundup,F#,Rounding,Roundup,例如,我可以使用System.Math.Round((float),2)将我的float四舍五入到最接近的小数点后2位,但是在F#中是否存在我可以将我的float四舍五入到小数点后2位的情况? 谢谢你提供了一个简单的取整解决方案 let round x d = let rounded = Math.Round(x,d) if rounded < x then x + Math.Pow(10,-d) else rounded 让我们绕x d= 设四舍五入=数学四舍五入(x,
System.Math.Round((float),2)
将我的float四舍五入到最接近的小数点后2位,但是在F#中是否存在我可以将我的float四舍五入到小数点后2位的情况?
谢谢你提供了一个简单的取整解决方案
let round x d =
let rounded = Math.Round(x,d)
if rounded < x then x + Math.Pow(10,-d) else rounded
让我们绕x d=
设四舍五入=数学四舍五入(x,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,这开始影响您计算的是借方还是贷方。如果你是对称的,例如总是远离零,那么你就不在乎了。Ergh,一个If分支只是为了取整?加上所需精度的一半,然后再四舍五入,当然!更糟糕的是,由于默认的RoundToEven行为,一些已经舍入的数字是不稳定的。例如,综述1.052将产生1.06。您需要在回合中使用middpointrounding.AwayFromZero并确保始终将负数四舍五入。
0.001 + 0.01/2 = 0.006
-> 2dp: 0.01