Visual Studio デバッガーで奇妙な結果をもたらす単純なプログラムがあります。
Console.WriteLine("4280.159d * 1000000 = {0}", 4280.159d * 1000000);
double D = 4280.159d * 1000000;
Console.WriteLine("D = {0}", D);
Console.WriteLine("Put a breakpoint here and look at value of D in debugger");
これにより、次のように出力されます。
4280.159d * 1000000 = 4280159000
D = 4280159000
この出力は正しいですが、デバッガーで見ると、D の値は 4280158999.9999995 と表示されます。
即時ウィンドウに同じ方程式を入力すると、同じ不正解が得られます。
正しいと思われる答えを得る唯一の方法は、デバッガーで 10 進数にキャストすることです。
(decimal)4280.159d * 1000000
4280159000
VS2010でもVS2012でも動作は同じで、64bitか32bitかは関係ないようです。デバッガーが実行中のコードとは異なる結果を返すのはなぜですか?それを修正する方法はありますか?