Visual Studio Professional 2012 を使用しています。次のコードを使用して、.NET Framework 4.5 をターゲットとする新しい C# ConsoleApplication を作成しました。
static void Main(string[] args)
{
double x = 2.44445;
double y = Math.Round(x, 4, MidpointRounding.AwayFromZero);
Console.WriteLine(y);
Console.ReadKey();
}
期待される結果は 2.4445 のはずですが、実際には 2.4444 が返されます。//以前のフレームワーク バージョンでも同じ結果で、VCE2010 を試しました。
このような問題は通常、double データ型の格納方法 (つまり、有限の 10 進数が無限の 2 進数に変換される) に起因することを知っています。しかし、2.44445 のように 5 桁の 10 進数でこれが起こるとは思っていませんでした
もっと短い小数でもそうならないか心配です。また、C# で (ゼロから離れた規則を使用して) 丸めるためのより安全な方法を学びたいと思います。ありがとう。