Это не реальный пример! Пожалуйста, не предлагайте использовать decimal
или что-то еще.
Я спрашиваю об этом только потому, что действительно хочу знать, почему так происходит.
Недавно я снова посмотрел потрясающую веб-передачу Tekpub Mastering C# 4.0 with Jon Skeet.
На эпизоде 7 - Decimals and Floating Points все идет очень странно и даже наш Чак Норрис программирования (он же Jon Skeet) не имеет реального ответа на мой вопрос. Только может быть.
MyTestMethod()
провалился, а MyTestMethod2()
прошел?[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
Ожидалось: 0.99999999999999989d Но было: 1.0d
[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()
не покрывает это?