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。

如果您在即时窗口中键入相同的方程式,您将得到相同的错误答案。

获得似乎正确答案的唯一方法是在调试器中转换为十进制

(decimal)4280.159d * 1000000
4280159000

VS2010 和 VS2012 中的行为是相同的,它是 64 位还是 32 位似乎并不重要。为什么调试器会给出与运行代码不同的结果,有没有办法修复它?

4

1 回答 1

6

调试器显示正确的值。该WriteLine调用将小数四舍五入并将其转换为字符串以便显示。

于 2013-05-23T00:43:36.100 回答