Roundメソッドを使って指定した少数桁で四捨五入したい場合は、''を忘れずに指定しないと、偶数の丸め(銀行型丸め)''なるので注意が必要です。
以下に'MidpointRounding.AwayFromZero'', MidpointRounding.ToEven を使ったサンプルコードを記します。
Decimal型とRoundメソッドを使って、四捨五入のMidpointRounding.AwayFromZeroと偶数の丸め(銀行型丸め)のMidpointRounding.ToEvenのサンプルコードを以下に記します。
サンプルコードは、C#、Visual Basic(VB)になります。
動作結果は、以下の「[[実行結果>#実行結果]]」を参照してください。
少数第三位で丸めています。
using System; class Program { static void Main(string[] args) { decimal[] d = new[] { 10.114M, 10.115M, 10.116M, 10.124M, 10.125M, 10.126M }; foreach (var v in d) { decimal r = decimal.Round(v, 2, MidpointRounding.AwayFromZero); Console.WriteLine("{0} Round({0},2,MidpointRounding.AwayFromZero) = {1}", v, r); } foreach (var v in d) { decimal r = decimal.Round(v, 2, MidpointRounding.ToEven); Console.WriteLine("{0} Round({0},2,MidpointRounding.ToEven) = {1}", v, r); } foreach (var v in d) { decimal r = decimal.Round(v, 2); Console.WriteLine("{0} Round({0},2) = {1}", v, r); } } }
Imports System Module Program Sub Main(args As String()) Dim d() As Decimal = {10.114D, 10.115D, 10.116D, 10.124D, 10.125D, 10.126D} For Each v In d Dim r As Decimal = Decimal.Round(v, 2, MidpointRounding.AwayFromZero) Console.WriteLine("{0} Round({0},2,MidpointRounding.AwayFromZero) = {1}", v, r) Next For Each v In d Dim r As Decimal = Decimal.Round(v, 2, MidpointRounding.ToEven) Console.WriteLine("{0} Round({0},2,MidpointRounding.ToEven) = {1}", v, r) Next For Each v In d Dim r As Decimal = Decimal.Round(v, 2) Console.WriteLine("{0} Round({0},2) = {1}", v, r) Next End Sub End Module
以下のキャプチャを見てもらうとわかるように、MidpointRounding.AwayFromZero は四捨五入となっていますが、
MidpointRounding.ToEvenと引数なしの場合は、偶数の丸め(銀行型丸め)になっているのが確認できます。
四捨五入でRoundw使う場合は、気を付けてください。
以上、Roundメソッドで四捨五入をしたい場合は、MidpointRounding.AwayFromZeroを忘れずに!でした。