このエントリーをはてなブックマークに追加


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

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

関連サイト

動作確認環境

  • Windows 10 ver.1909
  • Visual Studio 2019
  • .NET Core
  • コンソールアプリケーション

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を忘れずに!でした。


添付ファイル: file01.png 313件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-01-07 (火) 21:33:51