1
我在为存储float
s和double
s使用NSUserDefaults
在iPhone应用程序中使用,我遇到了一些不一致的地方,它们的精度如何工作,以及我如何理解它的工作原理。Objective-C浮点数/双精度
这个工程完全按照我想通:
{
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'.
但是,如果我第一次将双精度投射到float
,然后投射到double
,它的工作原理绝不失败:
{
NSString *key = @"SomeDoubleKey";
[PPrefs setDouble:234.32 forKey:key];
GHAssertEquals([PPrefs getDoubleForKey:key], (double)(float)234.32, @"");
[PPrefs removeObjectForKey:key];
}
我是在假设的数字,在没有结束时已经考虑double
秒的“F”进入。这是不正确的?如果是这样,为什么要铸造到float
,然后double
工作正常?