Objective c 从另一个NSNumber行为创建NSNumber?

Objective c 从另一个NSNumber行为创建NSNumber?,objective-c,floating-point,nsarray,nsnumber,Objective C,Floating Point,Nsarray,Nsnumber,我试图将NSNumber作为浮点值插入NSArray,其中包含来自另一个NSNumber的浮点值。我可以很好地创建数组,但是当我访问对象时,它似乎只是一个整数?我希望[NSNumber numberWithFloat:n]会生成一个带有浮点值的正常NSNumber int myInteger = 3; NSNumber *myNum = [NSNumber numberWithInt:myInteger]; NSArray *arr = [NSArray arrayWithObjects:[NS

我试图将NSNumber作为浮点值插入NSArray,其中包含来自另一个NSNumber的浮点值。我可以很好地创建数组,但是当我访问对象时,它似乎只是一个整数?我希望[NSNumber numberWithFloat:n]会生成一个带有浮点值的正常NSNumber

int myInteger = 3;
NSNumber *myNum = [NSNumber numberWithInt:myInteger];
NSArray *arr = [NSArray arrayWithObjects:[NSNumber numberWithFloat:[myNum floatValue]], nil];
NSLog(@"%@", [arr objectAtIndex:0]);
输出:

2012-01-09 16:39:32.664 ObjectiveCSandbox[2961:707] 3

此外,我可以很好地使用%I指针,当我尝试在NSLog中使用%f指针时,应用程序完全崩溃。这是怎么回事?这个问题比什么都学术。

最后一行试试这个:

NSLog(@"%f", [[arr objectAtIndex:0] floatValue]);

最后一行请尝试以下操作:

NSLog(@"%f", [[arr objectAtIndex:0] floatValue]);

NSNumber
的默认打印行为将删除任何前导零。因此,即使基础值是浮点,如果没有实际的非零浮点数,它也会像整数一样打印

至于第二个问题,在日志语句中同时使用
%i
%f
是不正确的,因为您正在记录一个对象。如果需要,您可以使用
%p
记录对象的指针值,但我认为目前这对您没有用处。如果要使用
%f
获取printf的默认浮点打印行为,则需要实际向其传递浮点而不是对象,如
NSLog(@“%f”,[[arr objectAtIndex:0]floatValue])


如果您真正感兴趣的是
NSNumber
是否在内部存储浮点,那么您可以打印出
-objcType
方法的结果,该方法将为基础值提供
@encode
-字符串,但我不知道你为什么会在意
NSNumber
使用什么特定的底层格式来存储你的值,只要它能以你想要的格式返回值(例如,通过调用
-floatValue
)。

NSNumber的默认打印行为将删除任何前导零。因此,即使基础值是浮点,如果没有实际的非零浮点数,它也会像整数一样打印

至于第二个问题,在日志语句中同时使用
%i
%f
是不正确的,因为您正在记录一个对象。如果需要,您可以使用
%p
记录对象的指针值,但我认为目前这对您没有用处。如果要使用
%f
获取printf的默认浮点打印行为,则需要实际向其传递浮点而不是对象,如
NSLog(@“%f”,[[arr objectAtIndex:0]floatValue])


如果您真正感兴趣的是
NSNumber
是否在内部存储浮点,那么您可以打印出
-objcType
方法的结果,该方法将为基础值提供
@encode
-字符串,但是我不知道你为什么会在意
NSNumber
使用什么特定的底层格式来存储你的值,只要它能以你想要的格式返回值(例如,通过调用
-floatValue
)。

请注意:如果你正在创建一个单对象数组,您可以/应该使用
arrayWithObject:
而不是
arrayWithObject
**s**
。请注意,如果您的NSNumber中包含正确的值(作为整数),则使用浮点表示创建第二个实例毫无意义,对于非常大的值,这样做可能会失去精度(如果我记得我的浮点表示信息正确的话)。请注意:如果你正在创建一个单对象数组,你可以/应该使用
arrayWithObject:
,而不是
arrayWithObject
**s**
。注意如果你有一个NSNumber,它的值是正确的(作为一个整数),使用浮点表示法创建第二个实例毫无意义,对于非常大的值,这样做可能会失去精度(如果我正确地记住了我的浮点表示法信息)。谢谢Kevin,使用%f和floatValue是我所缺少的。谢谢Kevin,使用%f和floatValue是我所缺少的。