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 位は考慮されません
本当じゃない。
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)
すべての小数点以下の桁数が考慮されます。0.2650000001m を丸めると 0.27 になります
10 進数の 4 桁目が必要ない場合は、Math.Truncate
丸めの前に次のように使用します。
Math.Truncate(0.2651m * 1000) / 1000; //0.265
Math.Truncate(0.2650m * 1000) / 1000; //0.265