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?

È stato utile?

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

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