Как я могу различить неустановленное значение с плавающей точкой и значение со значением 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 настолько тесно связаны, что вы можете вычислить одно на основе значения другого, вам действительно нужна только одна переменная для обоих свойств.

Другие вопросы по тегам