Число с плавающей запятой сохраняет приближение к числу (около 6-7 десятичных знаков точности для числа с плавающей запятой).
Когда вы вычисляете с помощью чисел fp, вы часто сталкиваетесь с крошечными ошибками представления в каждом числе, которые учитываются при расчете. Такие операции, как умножение, затем увеличивают эти ошибки. Если вы не будете осторожны, ошибки могут стать значительными.
Наиболее распространенная проблема с этим - использование ==, чтобы определить, точно ли два значения равны, потому что 2.999999 и 3.00000000 очень близки, но не равны. Из-за ошибки в представлении fp очень часто получаются числа, которые близки, но не равны, как вы нашли.
Поэтому, вместо того чтобы сказать «мой номер точно равен 3,0», мы должны сказать «достаточно ли мой номер до 3,0, чтобы я был доволен им?». Мы делаем это путем тестирования с допустимым значением, например: «Является ли мое значение больше 2,999 и меньше 3,001». При записи числа вы можете использовать строку формата, такую как "{0: 0.000}", чтобы округлить его и убрать крошечную ошибку, которую он отображает.
чтобы вы могли достичь желаемого (с точностью до 3 десятичных знаков) с помощью чего-то вроде:
Console.WriteLine("{0:0.000} == {1:0.000}: {2}", a, b, Math.Abs(a - b) < 0.0001);