Используя числа

NSNumber подкласс NSValue это предлагает значение как любой скалярный (числовой) тип C. Это определяет ряд методов в частности для создания объектов числа и доступа к значению как со знаком или без знака char, short int, int, NSInteger, long int, long long int, float, или double, или как a BOOL.

NSInteger nine = 9;
float ten = 10.0;
 
NSNumber *nineFromInteger = [NSNumber alloc] initWithInteger:nine];
NSNumber *tenFromFloat = [NSNumber numberWithFloat:ten];

Можно также создать объект числа непосредственно как использование литералов @:

NSNumber *nineFromInteger = @9;
NSNumber *tenFromFloat = @10.0;
NSNumber *nineteenFromExpression = @(nine + ten);

NSNumber определяет a compare: метод для определения упорядочивания два NSNumber объекты.:

NSComparisonResult comparison = [nineFromInteger compare:tenFromFloat];
// comparison = NSOrderedAscending
 
float aFloat = [nineFromInteger floatValue];
// aFloat = 9.0
BOOL ok = [tenFromFloat boolValue];
// ok = YES

NSNumber записи объекта числовой тип, с которым это создается и использует правила C для числового преобразования при сравнении NSNumber объекты различных числовых типов и при возврате значений как C числовые типы. Посмотрите любой стандарт C ссылка для получения информации о преобразовании типов. (Если Вы просите у числа objCType, однако, возвращенный тип не обязательно соответствует метод, с которым создавался получатель.)

Если Вы спрашиваете NSNumber объект для его значения с помощью типа, который не может содержать значение, Вы возвращаете ошибочный результат — например, если Вы просите float ценность числа создана с a double это больше, чем FLT_MAX, или integer ценность числа создана с a float это больше, чем максимальное значение NSInteger.

NSNumber *bigNumber = @(FLT_MAX);
NSInteger badInteger = [bigNumber integerValue];
NSLog(@"bigNumber: %@; badInteger: %d", bigNumber, badInteger);
// output: "bigNumber: 3.402823e+38; badInteger: 0"