Frage

Ich habe einen Preis, den ich auf der gewählten Währung basiert konvertieren müssen.

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 ist ein NSNumber und die valueForKey ist auch eine Zahl von einem plist Datei-I-Setup mit Conversion-Raten.

Das Problem, das ich bin, ist, dass mein price die Dezimalstellen fehlt. Jedesmal, wenn ich bekomme das intValue des Preises ist es nur auf- oder abgerundet. Das gleiche Problem besteht für den Wechselkurs I vom plist erhalten.

Ich habe in NSNumberFormatter aussieht, aber es wird mich nicht für die NSNumberFormatter lassen setFormat. Jede Beratung, bitte?

War es hilfreich?

Lösung

Nehmen Sie den Preis Zeichenfolge und den Zeitraum entfernen. Danach wandelt den NSString und int, die Sie mit 4235 ein paar Cent am Ende bedeutet (oder 42 Dollar und 35 Cent). (Stellen Sie außerdem sicher, dass der Preis Zeichenfolge Sie bekommen zwei Dezimalstellen! Manche Menschen sind faul, und Ausgang „3.3“ für „$ 3.30“).

NSString *removePeriod = [price stringByReplacingOccurrencesOfString:@"." withString:@""];
int convertedPrice = [removePeriod intValue];
float exchangeRate;

Dann die Wechselkurse erhalten je nachdem, welche Währung ausgewählt wurde und den folgenden Code:

int convertedCurrency = round((double)convertedPrice / exchangeRate);
addCurrency = [NSString stringWithFormat: @"%0d.%02d", (convertedCurrency / 100), (convertedCurrency % 100)];

addCurrency ist Ihr Endpreis.

Andere Tipps

int ist ein Integer-Typ - per Definition nicht einen Dezimalwert hat. Stattdessen versuchen:

float fprice = [price floatValue];
float currencyValue = [[plistDictionary valueForKey:@"EUR"] floatValue];
float convertedCurrency = (fprice / currencyValue);

intValue liefert eine ganze Zahl, die (per Definition) ohne Dezimalstellen auf eine Anzahl gerundet ist.

Sie können double , die eine doppelte zurückgibt (die den Bruchteil hat) oder DecimalValue , die eine NSDecimal Objekt zurückgibt.

mit der genauen Anzahl der deciamlas beschäftigen und wenn alle Währungen haben zwei Dezimalstellen (z JPY nicht) machen alle Zahlen, die Anzahl des Cent z.B. speichern 43,35 EUR als 4235.

Dann können Sie in der Arithmetik verwenden und dann beschäftigen nur mit Formatierung mit Wert / 100,0 und NSNumberFormatter

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top