簡體   English   中英

Objective-C Float /雙精度

[英]Objective-C Float / Double precision

我正在使用NSUserDefaults在iPhone應用程序中使用存儲floatdouble ,我遇到了一些不一致的精度如何與它們一起工作,以及我如何理解它的工作原理。

這完全像我想的那樣工作:

{
    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];
}

我假設在最后輸入的沒有'f'的數字已經被認為是double s。 這是不正確的? 如果是這樣,為什么要投射float然后double正常工作?

解決了! 結果我的框架方法+(void)setDouble:(double)value forKey:(NSString*)key實際定義為+(void)setDouble:( float )value forKey:(NSString*)key 傳遞的值 double,但轉換為float以在方法中使用。 一個簡單的復制和粘貼問題。 太糟糕了,Objective-C編譯器至少沒有像其他一切那樣發出警告......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM