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} )}
将双打从字典中拉出来表明这些幻象数字被保留了:
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)我怎样才能摆脱那些多余的幻影数字?