我有一些方法接收 afloat作为参数,并检查这个浮点数是否在数组中。为此,我首先将 float 转换为NSNumber. 这是我的代码的可测试简化:
float aFloat = 0.3;
NSNumber *aNSNumber = @(aFloat);
NSArray *anArray = @[@(0.0), @(0.3), @(1.0)];
NSLog(@"%d", [anArray containsObject:aNSNumber]);
此代码将记录0(即NO),因此它表示0.3不在anArray. 如果aFloat是“圆形”数字,例如0.0、0.5或1.0,则测试有效并记录1(即YES)。除此之外的任何数字,如0.3上述,都失败了。
另一方面,如果我们更改aFloat为 a double,它可以工作。或者,如果我们改成anArray这样:
NSArray *array = @[[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.3], [NSNumber numberWithFloat:1.0]];
它也有效。我假设 NSNumber@()符号创建了一个numberWithDouble:.
但是,我的问题是,即使aFloat是 a ,它也不应该工作float吗?因为我无论如何都要通过将它保存在“转换”它aNSNumber......而且它不应该自动识别 thefloat 0.3和 thedouble 0.3实际上是相同的数字吗?另外,为什么“圆形”数字仍然有效?