float
私はiPhoneアプリケーションで使用するためにsとdouble
sを保存することをいじっていNSUserDefaults
ましたが、精度がどのように機能するか、そしてそれがどのように機能するかについていくつかの矛盾に遭遇しました。
これは私が考えたとおりに機能します。
{
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
sと見なされていると想定していました。これは間違っていますか?もしそうなら、なぜにキャストしてからfloat
正しくdouble
機能するのですか?