我有一些方法接收 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
实际上是相同的数字吗?另外,为什么“圆形”数字仍然有效?