Какой числовой объект мне нужно использовать, нужно конвертировать 1.4 из NSString и сделать If меньше чем? - PullRequest
0 голосов
/ 21 августа 2011

Какой числовой объект я должен использовать, я пробовал double, но он конвертирует 1.4 в 1.39999999

Я также пробовал NSNumber, но не могу найти, как это сделать.

if (MyNum < 1.4) {

Также мне нужно конвертировать из NSString

Я оцениваю, моя версия приложения номер 1.4 - это моя новая версия выпуска.Мне нужно выполнить действие, если (appVer <1.4) </p>

Ответы [ 5 ]

2 голосов
/ 21 августа 2011

Используйте встроенные методы преобразования чисел NSString.

NSString *version = [[[NSBundle mainBundle]infoDictionary]objectForKey:@"CFBundleVersion"];
double versionNumber = [version doubleValue];

Тогда используйте:

if (versionNumber < 1.4) {

NSString Документация

2 голосов
/ 21 августа 2011

Если вам действительно нужна такая точность, используйте NSDecimalNumber.

2 голосов
/ 21 августа 2011

Какой результат вы хотите?Если вам нужен результат с плавающей запятой, то вы, как правило, получаете 1,39999999, потому что в IEEE float нет точного представления 1.4.

Насколько я знаю, Objective-C не имеет десятичного типа, так что если вы хотитечтобы иметь точное представление, вы должны использовать целые числа и самостоятельно отслеживать десятичную точку.Тогда любая арифметика становится довольно сложной.

[Я вижу, что действительно существует NSDecimalNumber, который должен делать большую часть того, что нужно.Однако не имею опыта работы с ним.]

Лучше всего, вероятно, использовать плавающую точку и полагаться на округление во время форматирования, если вам не нужна финансовая точность.

1 голос
/ 21 августа 2011

Для правильной обработки номеров версий, таких как 1.10 (которые floatValue и друзья будут интерпретировать как одно число, которое будет 1.1), вы должны заимствовать код сравнения версий Growl в их лицензия BSD .

0 голосов
/ 21 августа 2011

Несколько вещей

(1) NSNumber - это целочисленный тип, в соответствии с документами .Он не может представлять 1.4.

(2) РЕДАКТИРОВАТЬ: см. Мой комментарий о номерах версий Major / Minor / Patch ниже.Вы не совсем объяснили, что 1.4 представляет собой фиксированный номер версии, который следует разбить на части.

...