iPhone SDK 3.2.1
NSMutableDictionary *myDict = [NSMutableDictionary dictionaryWithCapacity:2];
[myDict setObject:[NSNumber numberWithDouble:0.1f] forKey:@"testDoubleObject"];
[myDict setValue:[NSNumber numberWithDouble:0.1f] forKey:@"testDoubleValue"];
myDict の説明をコンソールに出力すると、次のようになります。
myDict の説明の出力: {type = mutable, count = 2, capacity = 3,pairs = ( 0 : {contents = "testDoubleObject"} = {value = +0.10000000149011611938, type = kCFNumberFloat64Type} 1 : {contents = "testDoubleValue"} = {値 = +0.10000000149011611938、タイプ = kCFNumberFloat64Type} )}
double を dict から引き戻すと、これらの幻の数字が保持されていることがわかります。
NSNumber *doubleFromObject = [myDict objectForKey:@"testDoubleObject"];
NSNumber *doubleFromValue = [myDict valueForKey:@"testDoubleValue"];
doubleFromObject と doubleFromValue を出力すると、コンソールに次のように表示されます。
doubleFromObject の出力説明: {value = +0.10000000149011611938, type = kCFNumberFloat64Type}
doubleFromValue の出力説明: {value = +0.10000000149011611938, type = kCFNumberFloat64Type}
文字列から NSNumber doubleValue を作成しようとすると、同じことが起こります。
NSString *doubleAsAString = @"0.1";
NSNumber *doubleAsANumber = [NSNumber numberWithDouble:[doubleAsAString doubleValue]];
doubleAsANumber を出力すると、コンソールに次のように表示されます。
doubleAsANumber の出力説明: {value = +0.10000000000000000555, type = kCFNumberFloat64Type}
これらの余分な幻の数字が問題を引き起こしています。
1) これが起こる原因は何ですか?
2) 余分な幻の数字を取り除くにはどうすればよいですか?