将NSNumber存储为long double类型

时间:2011-06-27 05:33:40

标签: objective-c ios cocoa-touch types nsnumber

我有一个号码存储在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);

5 个答案:

答案 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 mentionedNSDecimalNumber,一个定点数字类,提供比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支持doublefloat,但不支持long double

答案 3 :(得分:0)

如果您需要高精度,可以使用NSDecimalNumber,但它也不支持long double

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDecimalNumber_Class/Reference/Reference.html

答案 4 :(得分:-3)

尝试投射数字:

long double lnumber = (long double) mynumber;