を引数として受け取り、float
この float が配列内にあるかどうかを確認するメソッドがあります。これを行うには、最初に 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
すると、double
機能します。または、次のように変更anArray
すると:
NSArray *array = @[[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.3], [NSNumber numberWithFloat:1.0]];
それも機能します。私が推測したのは、NSNumber@()
表記がnumberWithDouble:
.
しかし、私の質問は、 が の場合でも機能するべきではないということaFloat
ですfloat
。とにかく保存して「変換」しているので...そして、とが実際には同じ数字aNSNumber
であることを自動的に認識すべきではありませんか?また、なぜ「丸め」の数字が機能するのですか?float
0.3
double
0.3