intValue fehlt Dezimalstellen
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?
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