相关疑难解决方法(0)

使用System.Double的Assert.AreEqual()变得非常混乱

描述

这不是一个现实世界的例子!请不要建议使用decimal或其他东西.

我只是问这个,因为我真的想知道为什么会这样.

我最近再次与Jon Skeet一起看到了令人敬畏的Tekpub网络广播C#4.0.

在第7- 小数和浮点数它真的很奇怪,甚至我们的 Chuck Norris of Programming(又名Jon Skeet)对我的问题没有真正的答案.只有一个可能.

问题:为什么MyTestMethod()失败并MyTestMethod2()通过?

例1

[Test]
public void MyTestMethod()
{
    double d = 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;

    Console.WriteLine("d = " + d);
    Assert.AreEqual(d, 1.0d);
}
Run Code Online (Sandbox Code Playgroud) 这导致了

d = 1

预期:0.99999999999999989d但是:1.0d …

.net c# floating-point clr c#-4.0

19
推荐指数
4
解决办法
2万
查看次数

标签 统计

.net ×1

c# ×1

c#-4.0 ×1

clr ×1

floating-point ×1