Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#四舍五入到特定的小数位数_F#_Rounding_Roundup - Fatal编程技术网

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