.NET FrameworkではRound関数は四捨五入ではなく、JIS丸め*1という方式をとっています。次のように四捨五入とは違う結果が返ってきます。
using System; using System.Data; using NUnit.Framework; using NUnit.Framework.SyntaxHelpers; [TestFixture] public class RoundSample { [Test] public void 四捨五入() { Assert.That(Math.Round(0.5), Is.EqualTo(0.0)); //JIS丸め Assert.That(Math.Round(1.5), Is.EqualTo(2.0)); Assert.That(Math.Round(0.5, MidpointRounding.ToEven), Is.EqualTo(0.0)); //JIS丸め Assert.That(Math.Round(1.5, MidpointRounding.ToEven), Is.EqualTo(2.0)); Assert.That(Math.Round(0.5, MidpointRounding.AwayFromZero), Is.EqualTo(1.0)); Assert.That(Math.Round(1.5, MidpointRounding.AwayFromZero), Is.EqualTo(2.0)); Assert.That(Decimal.Round(0.5m), Is.EqualTo(0.0)); //JIS丸め Assert.That(Decimal.Round(1.5m), Is.EqualTo(2.0)); Assert.That(Decimal.Round(0.5m, MidpointRounding.ToEven), Is.EqualTo(0.0)); //JIS丸め Assert.That(Decimal.Round(1.5m, MidpointRounding.ToEven), Is.EqualTo(2.0)); Assert.That(Decimal.Round(0.5m, MidpointRounding.AwayFromZero), Is.EqualTo(1.0)); Assert.That(Decimal.Round(1.5m, MidpointRounding.AwayFromZero), Is.EqualTo(2.0)); } }
四捨五入をしたい場合はMidpointRounding.AwayFromZeroを指定してください。
参考ページ
数値を四捨五入するには?[2.0のみ、C#、VB] − @IT
http://blogs.wankuma.com/ogiogi/archive/2008/06/03/141046.aspx:tilte=おぎわらさんがRoundの結果をまとめているのも参考になります。
*1:http://homepage1.nifty.com/s_miyake/hp/jisround.htm:title