#author("2020-01-07T21:30:56+09:00","","")
#author("2020-01-07T21:32:06+09:00","","")
#navi(../)
* 四捨五入をするときはMidpointRounding.AwayFromZeroにすること [#r7273b10]
Roundメソッドを使って指定した少数桁で''四捨五入''したい場合は、''''を忘れずに指定しないと、''偶数の丸め(銀行型丸め)''なるので注意が必要です。~
以下に'MidpointRounding.AwayFromZero'', MidpointRounding.ToEven を使ったサンプルコードを記します。
Roundメソッドを使って指定した少数桁で''四捨五入''したい場合は、''MidpointRounding.AwayFromZero''を忘れずに指定しないと、''偶数の丸め(銀行型丸め)''なるので注意が必要です。~
以下に''MidpointRounding.AwayFromZero'', MidpointRounding.ToEven を使ったサンプルコードを記します。

#htmlinsert(windev-top.html)
#contents

* 関連サイト [#y96c43a7]
-[[Microsoft | .NET Decimal.Round メソッド>https://docs.microsoft.com/ja-jp/dotnet/api/system.decimal.round?view=netframework-4.8#System_Decimal_Round_System_Decimal_System_Int32_]]
-[[Microsoft | .NET Round(Decimal, Int32, MidpointRounding)>https://docs.microsoft.com/ja-jp/dotnet/api/system.decimal.round?view=netframework-4.8#System_Decimal_Round_System_Decimal_System_Int32_System_MidpointRounding_]]

* 動作確認環境 [#z3f536c5]
-Windows 10 ver.1909
-Visual Studio 2019
-.NET Core
-コンソールアプリケーション

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

** C# [#q11d0cf5]
 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) [#k19522d5]
 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


* 実行結果 [#je3a5d24]
以下のキャプチャを見てもらうとわかるように、''MidpointRounding.AwayFromZero'' は四捨五入となっていますが、~
MidpointRounding.ToEvenと引数なしの場合は、偶数の丸め(銀行型丸め)になっているのが確認できます。
#ref(01.png)
#br


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

#htmlinsert(windev-btm.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS