float
및 double
을 사용하여 iPhone 응용 프로그램에서 사용하기 위해 NSUserDefaults
을 사용하는 것이 었습니다. 정밀도가 어떻게 작용하는지, 그리고 그것이 어떻게 작동하는지 이해하는 방법에있어 약간의 불일치가있었습니다. . 내가 생각으로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'.
하지만를, 먼저 double을 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
에 캐스팅이 제대로 작동하는 이유는 무엇입니까?