Описание
Это не пример реального мира! Пожалуйста, не предлагайте использовать decimal
или что-то еще.
Я только спрашиваю об этом, потому что я действительно хочу знать, почему это происходит.
Недавно я снова увидел потрясающий веб-транслятор Tekpub Освоение С# 4.0 с помощью Jon Skeet.
В эпизоде 7 - Десятичные и плавающие точки это действительно странно и даже наше Chuck Norris of Programming (aka 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
Ожидается: 0.99999999999999989d Но было: 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
Но почему?
Update
Почему Assert.AreEqual()
не покрывает это?