Я возился с хранением float
s и double
s, используя NSUserDefaults
для использования в приложении 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'.
Но, если я сначала приведу двойное число к float
, а затем к double
, то оно будет работать без сбоев:
{
NSString *key = @"SomeDoubleKey";
[PPrefs setDouble:234.32 forKey:key];
GHAssertEquals([PPrefs getDoubleForKey:key], (double)(float)234.32, @"");
[PPrefs removeObjectForKey:key];
}
Я предполагал, что числа вводятся без'f' в конце уже считались double
с.Это неверно?Если так, почему приведение к float
и затем double
работает правильно?