如何比较小数知道有错误的余地

RJP*_*RJP 10 c# unit-testing decimal

我有两种不同的方法来计算一个值.两种方法运行后,我得到以下内容:

decimal a = 145.2344;
decimal b = 145.2345;
Run Code Online (Sandbox Code Playgroud)

我有一个单元测试:

  Assert.AreEqual(a,b);
Run Code Online (Sandbox Code Playgroud)

我希望能够解释+/- .0001的差异.如何添加此规则?

das*_*ght 15

NUnit的约束模型中,您可以这样做:

Assert.That(Math.Abs(a-b), Is.LessThan(0.0001M));
Run Code Online (Sandbox Code Playgroud)

更好的是,使它成为一个功能:

void AssertDiff(decimal a, decimal b, decimal diff = 0.0001) {
     Assert.That(Math.Abs(a-b), Is.LessThan(diff));
}
Run Code Online (Sandbox Code Playgroud)

编辑:在MS单元测试框架中,执行以下操作:

void AssertDiff(decimal a, decimal b, decimal diff = 0.0001) {
     Assert.IsTrue(Math.Abs(a-b) < diff);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果像AssertDiff这样的方法直接构建到框架中会很好.让测试失败并看到一个模糊的失败消息,例如"当它本来应该是真的时,某事是假的",而不是像"Something was 150.0,它应该是100.0"这样的特定消息,这很令人讨厌. (2认同)

Jon*_*art 4

简单的:

if (Math.Abs(a-b) < 0.0001m)
    // equal
Run Code Online (Sandbox Code Playgroud)