.NET - Сравнение чисел с плавающей запятой

Сравнение чисел с плавающей запятой (double, float) в .net напрямую на равенство небезопасно. Двойное значение переменной может со временем измениться на очень небольшую величину. Например, если вы установите для переменной num (double) значение 0,2 для объекта, через некоторое время этот объект ожидал в памяти, вы можете обнаружить, что число стало 0,1999999999999. Таким образом, num == 0.2 в этом случае будет ложным. Мое решение этой проблемы - создать свойство для округления числа:

double Num
{
get{ return Math.Round(num, 1); }
}

После вызова метода get of Num и возврата результата, может ли возвращаемое число снова измениться на 0,19 во время сравнения (Num == 0,2)? Это маловероятно, но гарантировано ли это?

6
задан Alp Hancıoğlu 19 August 2011 в 20:36
поделиться