#author("2020-01-07T21:30:56+09:00","","") #navi(../) * 四捨五入をするときはMidpointRounding.AwayFromZeroにすること [#r7273b10] Roundメソッドを使って指定した少数桁で''四捨五入''したい場合は、''''を忘れずに指定しないと、''偶数の丸め(銀行型丸め)''なるので注意が必要です。~ 以下に'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)になります。~ 動作結果は、以下の「[[実行結果>#実行結果]]」を参照してください。~ 少数第三位で丸めています。 ** 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)