我有一个号码存储在NSNumber
中,我想将其放入long double
,如下所示:
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMinimumSignificantDigits:5];
NSNumber * myNumber = [f numberFromString:@"1.1234567899"];
long double lnumber = mynumber;
NSLog(@"%Lf ",lnumber);
答案 0 :(得分:10)
NSNumber
是Objective-C对象,long double
是原始类型。您不能将对象分配给基元类型的变量。如果您想要存储在NSNumber
中的数值,则需要使用其中一种方法来检索它:
long double lnumber = [myNumber doubleValue];
没有规定在long double
中存储NSNumber
;最大的浮点类型只是double
。似乎long double
可能与iOS上的double
大小相同:请参阅此Apple Support Forum thread。
作为ThomasW mentioned,NSDecimalNumber
,一个定点数字类,提供比NSNumber
更高的精度(最多38位)和准确度。但是,仍然无法从中获取long double
;你只需用NSDecimalNumber
来做所有的数学运算来保持精度。
你的问题标题最初也提到NSInteger
,虽然身体没有,所以让我添加这个说明。 NSInteger
是基本类型,如long double
,因此您实际上可以从一个指定到另一个。
NSInteger myInteger = 10000;
long double lnumer = myInteger;
但是,因为它是一个整数,所以它不能有一个小数部分。
答案 1 :(得分:2)
据我所知,你得到的最好的是双倍价值。
long double lnumber = [mynumber doubleValue];
如果值在以
开头的字符串中,您也可以这样做NSString* sval = @"1.1234567";
double dval = [sval doubleValue];
答案 2 :(得分:1)
不幸的是你做不到。正如NSNumber Class Reference所述,NSNumber
支持double
和float
,但不支持long double
。
答案 3 :(得分:0)
如果您需要高精度,可以使用NSDecimalNumber
,但它也不支持long double
。
答案 4 :(得分:-3)
尝试投射数字:
long double lnumber = (long double) mynumber;