Roundメソッドを使って指定した少数桁で四捨五入したい場合は、MidpointRounding.AwayFromZeroを忘れずに指定しないと、偶数の丸め(銀行型丸め)なるので注意が必要です。
以下に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を忘れずに!でした。