An NSNumber
является объектом Objective-C, а long double
является примитивным типом. Вы не можете присвоить объект переменной примитивного типа. Если вам нужно числовое значение, которое хранится в NSNumber
, вам нужно использовать один из его методов для его получения:
long double lnumber = [myNumber doubleValue];
Нет условия для хранения long double
в NSNumber
; самый большой тип с плавающей точкой просто double
. Похоже, что long double
может иметь тот же размер, что и double
на iOS в любом случае: см. Эту ветку форума поддержки Apple .
Как и ThomasW упомянул , NSDecimalNumber
, класс чисел с фиксированной точкой, предлагает как большую точность (до 38 цифр), так и точность, чем NSNumber
. Тем не менее, до сих пор нет способа получить long double
; вам придется делать всю математику только с NSDecimalNumber
s, чтобы сохранить точность.
В заголовке вашего вопроса также упоминалось NSInteger
, хотя в теле нет, поэтому позвольте мне добавить эту заметку. NSInteger
- это примитивный тип, такой как long double
, так что вы можете фактически назначать один другому.
NSInteger myInteger = 10000;
long double lnumer = myInteger;
Однако, поскольку это целое число, оно не может иметь дробной части.