我正在搞乱存储float
s 和double
sNSUserDefaults
用于 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'已经被认为是double
s。这是不正确的吗?如果是这样,为什么转换为 afloat
然后double
正常工作?