Чтобы определить, равно ли значение числа с плавающей запятой в точности нулю или нет, просто используйте компаратор '==' для нуля и убедитесь, что тип в сравнительном выражении должен быть точно то же самое . как ниже:
double some_double = 0.0;
if (some_double == 0.0) do_something;
Но код, указанный выше только , запустите ' do_something ', когда ' some_double ' равен , которому непосредственно присвоено точному номеру ноль, не то, что вам нужно .
Если ' some_double ' назначено результатом некоторых аргументов (например, преобразование строки в числовое значение с плавающей запятой), которое буквально должно быть равно нулю , код выше не будет работать, как мы думали , поскольку значение ' some_double ' не может быть точно равно нулю из-за точной потери числа с плавающей запятой .
На данном этапе мы не должны просто сравнивать плавающее значение с нулем, если плавающее значение было присвоено некоторыми вычислительными выражениями. Другой способ определить, равен ли он « * 035 *» нулю, - сравнить абсолютное значение числа с плавающей запятой с очень маленьким значением , которое можно считать ноль.
Для этой цели существует машинное эпсилон , значение float
/ double
/ long double
ниже:
FLT_EPSILON = 1.192093e-07
DBL_EPSILON = 2.220446e-16
LDBL_EPSILON = 1.084202e-19
Но эти значения были слишком маленькими , что является точным наименьшим значением каждого типа чисел с плавающей запятой. Значения были не подходящими для использования сравнения числа, которое достаточно мало, чтобы считалось равным нулю , поскольку точная потеря чисел с плавающей запятой более значима чем эти значения эпсилон машины, см. ссылку ниже:
Арифметика с плавающей точкой и машинный эпсилон
Вы должны сами определить выделенное значение эпсилона в соответствии с вашим проектом.
Вы сравниваете введенный пользователем номер с нулем, и я видел MaxLength="5"
в вашем XML. Ваше значение эпсилона должно быть 0,0001, так как оно меньше 0,001, что является минимальным ненулевым входным значением вашего <entry>
элемента управления.