1

我正在搞乱存储floats 和doublesNSUserDefaults用于 iPhone 应用程序,我在精度如何与它们一起工作以及我如何理解它的工作原理方面遇到了一些不一致。

这和我想的完全一样:

{
    NSString *key = @"OneLastKey";
    [PPrefs setFloat:235.1f forKey:key];
    GHAssertFalse([PPrefs getFloatForKey:key] == 235.1, @"");
    [PPrefs removeObjectForKey:key];
}

但是,这个没有:

{
    NSString *key = @"SomeDoubleKey";
    [PPrefs setDouble:234.32 forKey:key];
    GHAssertEquals([PPrefs getDoubleForKey:key], 234.32, @"");
    [PPrefs removeObjectForKey:key];
}

这是 GHUnit 给我的输出:

'234.320007324' should be equal to '234.32'. 

但是,如果我首先将 double 转换为 a float,然后再转换为 adouble它可以正常工作:

{
    NSString *key = @"SomeDoubleKey";
    [PPrefs setDouble:234.32 forKey:key];
    GHAssertEquals([PPrefs getDoubleForKey:key], (double)(float)234.32, @"");
    [PPrefs removeObjectForKey:key];
}

我假设最后输入的数字没有'f'已经被认为是doubles。这是不正确的吗?如果是这样,为什么转换为 afloat然后double正常工作?

4

1 回答 1

4

解决了!原来我的框架方法+(void)setDouble:(double)value forKey:(NSString*)key 实际上被定义为. 传递的值双精度值,但已转换为浮点数以供方法中使用。一个简单的复制和粘贴问题。太糟糕了,Objective-C 编译器至少没有像其他所有东西一样发出警告......+(void)setDouble:(float)value forKey:(NSString*)key

于 2011-03-23T17:32:14.350 回答