我有一个简单的程序,在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位似乎并不重要。 为什么调试器会从运行的代码中得到不同的结果,有没有办法解决它?
答案 0 :(得分:6)
调试器显示正确的值。 WriteLine
调用将小数点四舍五入并将其转换为字符串,以便显示它。