Как я могу различить неустановленное значение с плавающей точкой и значение со значением 0?
У меня есть метод, который должен делать что-то другое, когда ему дано неустановленное значение с плавающей точкой, чем значение с плавающей запятой со значением 0. По сути, мне нужно проверить, была ли переменная, считая ее как заданную, если она имеет значение 0,
Итак, какой заполнитель я должен использовать в качестве неустановленного значения (nil, NULL, NO и т. Д.) И как можно проверить, является ли переменная неустановленной, не возвращая true для значения 0?
3 ответа
Вы можете инициализировать ваши значения с плавающей точкой NaN (например, позвонив nan()
или же nanf()
), а затем проверить с isnan()
если они были изменены, чтобы держать номер. (Обратите внимание, что тестирование myvalue == nan()
не сработает.)
Это довольно просто (вы, вероятно, включите math.h
в любом случае) и концептуально: любое значение, которое не установлено в число, является "не числом"...
Использование значения константы для указания неустановленного состояния часто приводит к ошибкам, когда переменная законно получает значение этой константы.
Рассмотреть возможность использования NSNumber
хранить ваш поплавок. Таким образом, это может быть не только nil
, это будет по умолчанию в этом состоянии.
Это предполагает, что вам нужно только небольшое количество поплавков. Если вам нужны миллионы из них, NSNumber
может быть слишком медленным и интенсивным объемом памяти.
Вместо того, чтобы перегружать эти float
свойства (назовем их X и Y), создать отдельный isValid
флаг для каждого свойства. Инициализируйте флаги, чтобы указать, что плавающие числа не были установлены, и предоставьте свои собственные установщики для надлежащего управления флагами. Так что ваш код может выглядеть примерно так:
if (self.isXValid == YES) {
self.Y = ... // assigning to Y sets isYValid to YES
}
else if (self.isYValid == YES) {
self.X = ... // assigning to Y sets isXValid to YES
}
На самом деле вы можете пойти еще дальше, и установщик для X также назначит Y и наоборот. Или, если X и Y настолько тесно связаны, что вы можете вычислить одно на основе значения другого, вам действительно нужна только одна переменная для обоих свойств.