将NSNumber存储为long double类型

sum*_*odi 3 cocoa-touch types objective-c nsnumber ios

我有一个号码存储在一个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);
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 10

An NSNumber是Objective-C对象,long double是原始类型.您不能将对象分配给基元类型的变量.如果您想要存储在其中的数值,则NSNumber需要使用其中一种方法来检索它:

long double lnumber = [myNumber doubleValue];
Run Code Online (Sandbox Code Playgroud)

没有规定存放long double一个NSNumber; 最大的浮点类型很简单double.似乎long double可能与doubleiOS上的大小相同:请参阅此Apple支持论坛主题.

正如ThomasW所提到的,NSDecimalNumber定点数字类提供更高的精度(最多38位)和准确度NSNumber.long double但是,仍然没有办法摆脱它; 你必须用NSDecimalNumbers 来做所有数学运算才能保持精度.

你最初提到的问题标题NSInteger,虽然身体没有,所以让我添加这个说明.An NSInteger是一种原始类型,long double因此您实际上可以从一个分配给另一个.

NSInteger myInteger = 10000;
long double lnumer = myInteger;
Run Code Online (Sandbox Code Playgroud)

但是,因为它是一个整数,所以它不能有一个小数部分.