0

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かは関係ないようです。デバッガーが実行中のコードとは異なる結果を返すのはなぜですか?それを修正する方法はありますか?

4

1 に答える 1