0

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

float number = 0.9f;

number -= 0.1f;

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

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

mrabets
  • 47

2 Answers2

2

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

decimal number = 0.9m;
number -= 0.1m;
Console.WriteLine(number);
Danis
  • 19,777
  • 6
  • 22
  • 56
2

Поскольку 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

CrazyElf
  • 71,194
  • А если мне надо далее работать с переменной? – mrabets Nov 28 '20 at 10:55
  • @mrabets Работайте, кто ж вам мешает. Но учтите, что точного значения переменная float хранить не умеет, всегда будет приблизительное. Но обычно и такого хватает для обычных вычислений. – CrazyElf Nov 28 '20 at 10:57