プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2018/10/15

[C#] Math.Round で四捨五入

event_note2018/10/15 5:00

C# で四捨五入を行いたい場合、Math.Round を使えば簡単ですが、その挙動についてメモしておきます。

小数点以下を四捨五入

Console.WriteLine(Math.Round(0.44));
Console.WriteLine(Math.Round(0.45));
Console.WriteLine(Math.Round(0.54));
Console.WriteLine(Math.Round(0.55));

出力結果

0
0
1
1

小数点以下第二位で四捨五入

Math.Round の第二引数で、四捨五入をする桁を指定します。

Console.WriteLine(Math.Round(0.44, 1));
Console.WriteLine(Math.Round(0.45, 1));
Console.WriteLine(Math.Round(0.54, 1));
Console.WriteLine(Math.Round(0.55, 1));

出力結果

0.4
0.4
0.5
0.6

0.45 の結果が 0.5 ではなく 0.4 になっています。

これは、Math.Round のデフォルトの挙動が最近接偶数への丸めになっているからだそうです。
最近接偶数への丸めについてはググってください。

普通の四捨五入を行いたい場合は、以下のように MidpointRounding.AwayFromZero を指定します。

Console.WriteLine(Math.Round(0.44, 1, MidpointRounding.AwayFromZero));
Console.WriteLine(Math.Round(0.45, 1, MidpointRounding.AwayFromZero));
Console.WriteLine(Math.Round(0.54, 1, MidpointRounding.AwayFromZero));
Console.WriteLine(Math.Round(0.55, 1, MidpointRounding.AwayFromZero));

出力結果

0.4
0.5
0.5
0.6