【发布时间】:2010-12-24 13:33:33
【问题描述】:
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 的打印说明: {类型 = 可变,计数 = 2,容量 = 3,对 = ( 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,类型 = kCFNumberFloat64Type}
这些多余的幻影数字给我带来了麻烦。
1) 发生这种情况的原因是什么?
2) 我怎样才能摆脱那些多余的幻影数字?
【问题讨论】:
标签: iphone sdk double nsnumber number-formatting