四捨五入をするときはMidpointRounding.AwayFromZeroにすること †Roundメソッドを使って指定した少数桁で四捨五入したい場合は、MidpointRounding.AwayFromZeroを忘れずに指定しないと、偶数の丸め(銀行型丸め)なるので注意が必要です。 関連サイト †動作確認環境 †
Roundメソッドのサンプルコード †Decimal型とRoundメソッドを使って、四捨五入のMidpointRounding.AwayFromZeroと偶数の丸め(銀行型丸め)のMidpointRounding.ToEvenのサンプルコードを以下に記します。 C# †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); } } } Visual Basic(VB) †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 は四捨五入となっていますが、 四捨五入でRoundw使う場合は、気を付けてください。 |