4

たとえば、浮動小数点数を最も近い小数点以下 2 桁に丸めるために使用できますが、浮動小数点数を小数点以下 2 桁に切り上げるSystem.Math.Round((float),2)ことができる F# はありますか? ありがとう

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

切り上げるには (0 から離れるのではなく、厳密に切り上げます):

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

0.001 を 2 dp に丸めることを検討してください。これを 0.01 に丸めます。

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

これは、切り捨てから通常の丸めを取得する一般的な方法に由来します。必要な精度の半分を追加して切り捨てます。ただし、これは負の数の場合に問題になるため、元の値の符号に応じてデルタを減算または加算する必要があります。

常に切り上げを行う場合、負の金額はゼロに向かって丸められることに注意してください。通常 2 dp が必要な金融状況では、0.021 の残高は 0.03 に丸められるため、これは悪い考えですが、-0.021 の残高は -0.02 に丸められ、借方と貸方のどちらを計算しているかが問題になり始めます。 . 対称的に行う場合、たとえば常にゼロから離れている場合は、もう気にする必要はありません。

于 2013-04-10T14:34:28.903 に答える