Domanda

Sono stato nei guai con la memorizzazione floats e doubles utilizzando NSUserDefaults per l'utilizzo in un'applicazione per iPhone, e mi sono imbattuto in alcune incongruenze in quanto i lavori di precisione con loro, e come ho capito funziona.

Questo funziona esattamente come ho pensato:

{
    NSString *key = @"OneLastKey";
    [PPrefs setFloat:235.1f forKey:key];
    GHAssertFalse([PPrefs getFloatForKey:key] == 235.1, @"");
    [PPrefs removeObjectForKey:key];
}

Tuttavia, questo non ha:

{
    NSString *key = @"SomeDoubleKey";
    [PPrefs setDouble:234.32 forKey:key];
    GHAssertEquals([PPrefs getDoubleForKey:key], 234.32, @"");
    [PPrefs removeObjectForKey:key];
}

Questo è l'output GHUnit mi dà:

'234.320007324' should be equal to '234.32'. 

Ma, se ho gettato il doppio per un float, e quindi per un double funziona senza errori:

{
    NSString *key = @"SomeDoubleKey";
    [PPrefs setDouble:234.32 forKey:key];
    GHAssertEquals([PPrefs getDoubleForKey:key], (double)(float)234.32, @"");
    [PPrefs removeObjectForKey:key];
}

Ero sotto l'ipotesi che i numeri inseriti senza una 'f', alla fine sono stati già considerati doubles.Questo è errato?Se è così, perché il casting per un float e poi double funziona correttamente?

È stato utile?

Soluzione

Risolto!Si scopre che i miei quadro metodo +(void)setDouble:(double)value forKey:(NSString*)key è stato definito, in realtà, come +(void)setDouble:(float)value forKey:(NSString*)key.Il valore passato era un doppio, ma è stato convertito in float per l'uso nel metodo.Un semplice copia e incolla problema.Peccato che l'Objective-C, il compilatore non ha almeno lanciare un avvertimento come sembra fare per tutto il resto...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top