22

以下が適用されます。

var rounded = Decimal.Round(7.635m, 2);
//rounded: 7.63

私にとって、これは間違った予期しない動作です。roundedの値は7.64であると想定します。

これを達成するために、私はできる:

var rounded = Decimal.Round(7.635m, 2, MidpointRounding.AwayFromZero);
//rounded: 7.64

これが のデフォルトの動作ではないDecimal.Roundのはどうしてですか? これには正当な理由がありますか?

4

3 に答える 3

3

Math.Round(Decimal, Int32)メソッドから

このメソッドの動作は、IEEE 規格 754 のセクション 4 に従います。中間値を一方向に一貫して丸めることに起因する丸め誤差を最小限に抑えます。

このメソッドは、モード引数 MidpointRounding.ToEven を指定して Round メソッドを呼び出すのと同じです。d の小数点以下の桁の右側に 0 以外の数字が 1 つあり、その値が 5 の場合、小数点以下の桁が奇数の場合は切り上げられ、偶数の場合は変更されません。d の小数部の桁数が 10 進数よりも少ない場合、d は変更されずに返されます。

于 2013-03-14T09:41:26.563 に答える