iPhone SDK 3.2.1铸造为一个NSNumber的doubleValue添加额外[幻象]精度
NSMutableDictionary *myDict = [NSMutableDictionary dictionaryWithCapacity:2];
[myDict setObject:[NSNumber numberWithDouble:0.1f] forKey:@"testDoubleObject"];
[myDict setValue:[NSNumber numberWithDouble:0.1f] forKey:@"testDoubleValue"];
打印myDict到控制台的产率本说明书:myDict的
印刷描述: {类型= mutable,count = 2,capacity = 3,pairs =( 0:{contents =“testDoubleObject”} = {value = +0.10000000149011611938,type = kCFNumberFloat64Type} 1:{contents =“testDoubleValue”} = {value = +0.10000000149011611938 ,type = kCFNumberFloat64Type} )}
拉双打背出字典的显示了这些幻象位数被保留:
NSNumber *doubleFromObject = [myDict objectForKey:@"testDoubleObject"];
NSNumber *doubleFromValue = [myDict valueForKey:@"testDoubleValue"];
印刷doubleFromObject和doubleFromValue产生这在控制台:doubleFromObject的
印刷描述: {值= 0.10000000149011611938,类型= kCFNumberFloat64Type} doubleFromValue的
印刷描述: {值= 0.10000000149011611938,类型= kCFNumberFloat64Type}
当我尝试从一个字符串创建一个NSNumber的doubleValue同样的事情发生:
NSString *doubleAsAString = @"0.1";
NSNumber *doubleAsANumber = [NSNumber numberWithDouble:[doubleAsAString doubleValue]];
印刷doubleAsANumber得到这个控制台:doubleAsANumber的
印刷描述: {值= 0.10000000000000000555 ,type = kCFNumberFloat64Type}
这些额外的幻像数字引起我的问题。
1)是什么导致了这种情况发生?
2)如何摆脱那些额外的幻像数字?