を引数として受け取り、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.3anArrayaFloat0.00.51.01YES0.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.3double 0.3