gpt4 book ai didi

c# - Assert.AreEqual() 与 System.Double 变得非常困惑

转载 作者:IT王子 更新时间:2023-10-29 04:40:01 25 4
gpt4 key购买 nike

描述

这不是真实世界的例子!请不要建议使用 decimal 或其他东西。

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

我最近再次看到很棒的 Tekpub 网络广播 与 Jon Skeet 一起掌握 C# 4.0

在第 7 集 - 小数和 float 中,它真的很奇怪,甚至我们的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);
}
这导致

d = 1

Expected: 0.99999999999999989d But was: 1.0d

例子2

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

Console.WriteLine("d = " + d);
Assert.AreEqual(d, 0.5d);
}
这导致成功

d = 0,5

但为什么呢?

更新

为什么 Assert.AreEqual() 没有涵盖这一点?

最佳答案

Assert.AreEqual() 确实涵盖了这一点;您必须将重载与第三个 delta 参数一起使用:

Assert.AreEqual(0.1 + 0.1 + 0.1, 0.3, 0.00000001);

关于c# - Assert.AreEqual() 与 System.Double 变得非常困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8825956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com