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)如何擺脫那些額外的幻像數字?