给定以下测试:
[Fact]
public void FactMethodName()
{
var d = 6.4133;
var actual = d.ToString("R");
Assert.Equal("6.4133", actual);
}
它在 x86 上传递,但不在任何 CPU 或 x64 上:
Assert.Equal() Failure
Position: First difference is at position 5
Expected: 6.4133
Actual: 6.4132999999999996
问题是为什么会这样?请注意,并非所有双精度值都以这种方式运行。
我了解浮点问题。无需将我指向维基百科。无需指出测试是不正确的——它只是说明了问题——Console.WriteLine(..);
如果你愿意,可以将其更改为。
更新我删除了对测试运行者的提及,因为这些细节被证明是无关紧要的。