intValue mancano i decimali
Domanda
Ho un prezzo che devo convertire in base alla valuta selezionata.
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"currency.plist"];
NSDictionary *plistDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];
int price = [price intValue];
int currencyValue = [[plistDictionary valueForKey:@"EUR"] intValue];
int convertedCurrency = (price / currencyValue);
price
è un NSNumber
e il valueForKey
è anche un numero di un file plist che ho impostato con i tassi di conversione.
Il problema che sto riscontrando è che nel mio price
mancano i decimali. Ogni volta che ottengo l'intValue dal prezzo è solo arrotondato per eccesso o per difetto. Lo stesso problema esiste per il tasso di cambio che ottengo dal plist.
Ho esaminato NSNumberFormatter
ma non mi permette di setFormat
per NSNumberFormatter. Qualche consiglio, per favore?
Soluzione
Prendi la stringa di prezzo e rimuovi il periodo. Successivamente, converti la NSString in e int, il che significa che finisci con 4235 penny (o 42 dollari e 35 centesimi). (Inoltre, assicurati che la stringa di prezzo che stai ricevendo abbia due cifre decimali! Alcune persone sono pigre e producono "3,3" per "$ 3,30".
NSString *removePeriod = [price stringByReplacingOccurrencesOfString:@"." withString:@""];
int convertedPrice = [removePeriod intValue];
float exchangeRate;
Quindi ottieni i tassi di cambio in base alla valuta selezionata e usa il seguente codice:
int convertedCurrency = round((double)convertedPrice / exchangeRate);
addCurrency = [NSString stringWithFormat: @"%0d.%02d", (convertedCurrency / 100), (convertedCurrency % 100)];
addCurrency è il tuo prezzo finale.
Altri suggerimenti
int
è un tipo intero - per definizione non ha un valore decimale. Prova invece:
float fprice = [price floatValue];
float currencyValue = [[plistDictionary valueForKey:@"EUR"] floatValue];
float convertedCurrency = (fprice / currencyValue);
intValue restituisce un numero intero, che (per definizione) viene arrotondato a un numero senza decimali.
Puoi usare doubleValue , che restituisce un doppio (che ha la parte frazionaria) o decimalValue che restituisce un oggetto NSDecimal.
Per gestire il numero esatto di deciamlas e se tutte le valute hanno 2 decimali (ad es. non in JPY), fare di tutti i numeri il numero di centesimi per esempio. conservare 43,35 EUR come 4235.
Quindi puoi usare l'aritmetica e poi occuparti della formattazione usando value / 100.0 e NSNumberFormatter