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
工作正常?