C # Получение странных результатов для простых математических операций

Я заметил странное поведение при добавлении двух двойных чисел, иногда это работает правильно, а иногда нет!

Вот первый пример:

double num1 = 0.1 + 0.7; //Guess the result?

Легко - 0,8 !!! или нет?

Посмотрите на странный результат:

И угадайте, что, если оператор идет внутри блока else, и печатаетnum1 - и нет, это неt печатает 0,799999999999993, печатает 0,8.

Итак, я сделал еще один шаг вперед и попробовал этот код:

if (0.1 + 0.7 == 0.8) //Returns false ??
{
    Console.WriteLine("Correct");
}

Хорошо, странно, но теперь я нашел правильный путь, он должен использовать f (float). Как я помню, в double много пробелов, поэтому он может содержать более высокие числа, возможно, в этом причина.

float num2 = 0.1f + 0.7f;

if (num2 == 0.8f) //Perfect - finally works !!!
{
    Console.WriteLine("Correct");
}
else
{
    Console.WriteLine(num2);
}

Но сейчас я пытаюсь это сделать - и опять возвращается ложь, почему?

if (0.1f + 0.7f == 0.8f) //Returns false :(
{
    Console.WriteLine("Correct");
}

Результаты часов при его отладке:

Может кто-нибудь объяснить мне, чтоздесь не так? Это ошибки?

Заранее спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос