2

Math.Round を使用する場合、「丸め」を行うときにすべての小数点以下の桁数が考慮されますか?

例;

decimal myNumber1 = 0.2651m;
decimal myNumber2 = 0.2650m;

Math.Round(myNumber1, 2) gives 0.27
Math.Round(myNumber2, 2) gives 0.26

四捨五入では小数点第 4 位が考慮されないため、両方とも 0.26 であると予想されます。

4

3 に答える 3

4

四捨五入では小数点第 4 位は考慮されません

本当じゃない。

MSDN によると、Math.Round(decimal)は の丸めタイプを使用しMidpointRounding.ToEvenます。

Midpoint Rounding は、丸められる値が 2 つの可能な丸められた値のちょうど中間にある場合の丸め動作を指定します。

例えば、

  • 0.2649常に丸めます0.26
  • 0.2651常に丸めます0.27

小数点以下二桁を四捨五入する場合。

興味深いのは、0.2650: の場合に何が起こるかです。デフォルトでは、次のMidpointRounding.ToEvenようになります。

  • 0.26為にMath.Round(0.2650, 2)
  • 0.28為にMath.Round(0.2750, 2)

これは、丸めの後、最上位桁に向かって丸めが行われるためです (6最初のケースで8は、2 番目のケースでは)。

ただし、 を使用するMidpointRounding.AwayFromZeroと、次のようになります。

  • 0.27為にMath.Round(0.2650, 2, MidpointRounding.AwayFromZero)
  • 0.28為にMath.Round(0.2750, 2, MidpointRounding.AwayFromZero)
于 2013-02-05T08:37:12.440 に答える
0

すべての小数点以下の桁数が考慮されます。0.2650000001m を丸めると 0.27 になります

于 2013-02-05T08:43:53.053 に答える
0

10 進数の 4 桁目が必要ない場合は、Math.Truncate丸めの前に次のように使用します。

Math.Truncate(0.2651m * 1000) / 1000; //0.265
Math.Truncate(0.2650m * 1000) / 1000; //0.265
于 2013-02-05T08:39:43.703 に答える