1
   public static decimal Round(
decimal d,
int decimals
    )

decimals パラメータは、戻り値の小数桁数を指定し、範囲は 0 ~ 28 です。decimals がゼロの場合、整数が返されます。

d の小数点以下第 1 桁の値が 5 の場合、小数点以下の桁が奇数の場合は切り上げられ、偶数の場合はそのままになります。d の精度が 10 進数未満の場合、d はそのまま返されます。

    Math.Round(3.44, 1); //Returns 3.4.
   Math.Round(3.45, 1); //Returns 3.4.

3.45 が 3.4 を返す理由..この出力を理解できません。

4

3 に答える 3

4

MSDN から、 MidpointRoundingパラメーターを取る Round オーバーロードを使用して、この動作を変更できます。

ToEven (デフォルト、AKA Bankers Rounding) 数値が他の 2 つの数値の中間にある場合、最も近い偶数に丸められます。
AwayFromZero 数値が他の 2 つの数値の中間にある場合、ゼロから離れた最も近い数値に丸められます。

于 2011-10-06T13:58:01.963 に答える
1

あなたが言ったように、

d の小数点以下第 1 桁の値が 5 の場合、小数点以下の桁が奇数の場合は切り上げられ、偶数の場合はそのままになります。

3.45 では小数点以下 1 桁目が 5 で、4 は偶数なのでそのままです。これは非常に標準的な丸め方法です。5 が常に切り上げられると、平均や合計などの重みが本来よりも高くなる可能性があるためです。

于 2011-10-06T14:01:12.213 に答える
0

デフォルトの丸めはMidpointRounding.ToEven(バンカーの丸め) です。これは、丸め位置の桁の偶数に向かって引き寄せられることを意味します (つまり、4 は偶数であるため、3.4 に移動します)。

これは、すべての中点の丸めが同じ方向に進むときに発生する可能性のあるエラーの蓄積を最小限に抑えることを目的としています (もちろん、これは入力データに依存しますが、正と負の数値を均等に組み合わせても問題ない場合がありますAwayFromZero)。

だからあなたは持っています:

Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4 (down towards 4).
Math.Round(3.54, 1); //Returns 3.5.
Math.Round(3.55, 1); //Returns 3.6 (up towards 6).

利用可能なすべてのオプションの詳細な説明については、この回答を参照してください。

于 2011-10-06T14:05:10.220 に答える