【发布时间】:2017-11-15 08:37:38
【问题描述】:
我有一小段代码
double s = -2.6114289999999998;
double s7 = Math.Round(s, 7);
double s5 = Math.Round(s, 5);
double s6 = Math.Round(s, 6);
使用 Platform = Any CPU,我得到
s7: -2.611429
s5: -2.61143
s6: -2.611429
使用 Platform = x64,我得到
s7: -2.6114289999999998
s5: -2.61143
s6: -2.6114289999999998
为什么? (从 VS 的 Locals 窗口复制的输出)
整段代码是:
private void btnAlign_Click(object sender, EventArgs e)
{
double s = -2.6114289999999998;
double s7 = Math.Round(s, 7);
double s5 = Math.Round(s, 5);
double s6 = Math.Round(s, 6);
}
【问题讨论】:
-
你能贴出整个代码来重现吗?
-
我在找一位同事 - 他遇到了它,我已经在自己的电脑上进行了审查。
-
在 VS 15.3.3 和 .NET 4.5.2 中确认。
-
如果你使用 Jon Skeet 的DoubleConverter。
s6和s7在 32 位和 64 位中是完全相同的值(与s相同)。但是它们在调试器本地窗口中的显示方式不同。我会说调试器的演示比运行时更成问题。