Проблема с точность float при вычислениях

Вот простой пример.

float number = 0.9f;

number -= 0.1f;

// ВЫВОД: number = 0,79999995

Мне нужно получить 0,8. Как решить проблему с точностью?


Ответы (2 шт):

Автор решения: Maxim Kostenko

Используйте вместо float decimal

decimal number = 0.9m;
number -= 0.1m;
Console.WriteLine(number);
→ Ссылка
Автор решения: CrazyElf

Поскольку 0.79999995 - это реальное значение переменной типа float в данном случае (ну, не умеет этот тип хранить числа с абсолютной точностью), то у вас один вариант - ограничить точность отображения переменной при выводе, тогда она округлится до нужного вам значения:

using System;
                    
public class Program
{
    public static void Main()
    {
        float number = 0.9f;
        number -= 0.1f;
        Console.WriteLine($"{number:f1}");
    }
}

Вывод:

0.8

Ссылка на код на dotnetfiddle в среде .NET 5

→ Ссылка