四捨五入をするときはMidpointRounding.AwayFromZeroにすること

Roundメソッドを使って指定した少数桁で四捨五入したい場合は、''を忘れずに指定しないと、偶数の丸め(銀行型丸め)''なるので注意が必要です。
以下に'MidpointRounding.AwayFromZero'', MidpointRounding.ToEven を使ったサンプルコードを記します。

関連サイト

動作確認環境

Roundメソッドのサンプルコード

Decimal型とRoundメソッドを使って、四捨五入のMidpointRounding.AwayFromZeroと偶数の丸め(銀行型丸め)のMidpointRounding.ToEvenのサンプルコードを以下に記します。
サンプルコードは、C#、Visual Basic(VB)になります。
動作結果は、以下の「[[実行結果>#実行結果]]」を参照してください。
少数第三位で丸めています。

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 は四捨五入となっていますが、
MidpointRounding.ToEvenと引数なしの場合は、偶数の丸め(銀行型丸め)になっているのが確認できます。

01.png
 

四捨五入でRoundw使う場合は、気を付けてください。
以上、Roundメソッドで四捨五入をしたい場合は、MidpointRounding.AwayFromZeroを忘れずに!でした。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS