我需要根据所选货币进行转换。
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
是NSNumber
,valueForKey
也是我设置的转化率的plist文件中的数字。
我遇到的问题是我的price
缺少小数。每当我从价格中获得intValue时,它就会向上或向下舍入。我从plist那里得到的汇率存在同样的问题。
我调查了NSNumberFormatter
,但它不会让我setFormat
代表NSNumberFormatter。有什么建议吗?
答案 0 :(得分:3)
int
是整数类型 - 根据定义,它没有小数值。而是尝试:
float fprice = [price floatValue];
float currencyValue = [[plistDictionary valueForKey:@"EUR"] floatValue];
float convertedCurrency = (fprice / currencyValue);
答案 1 :(得分:2)
intValue 返回一个整数,(根据定义)将整数舍入为不带小数的数字。
您可以使用 doubleValue ,它返回一个double(有小数部分)或 decimalValue ,它返回一个NSDecimal对象。
答案 2 :(得分:1)
获取价格字符串并删除期间。之后将NSString转换为int和int,这意味着你最终得到4235便士(或42美元和35美分)。 (另外,请确保您获得的价格字符串有两位小数!有些人很懒,输出“3.3”表示“$ 3.30”。)
NSString *removePeriod = [price stringByReplacingOccurrencesOfString:@"." withString:@""];
int convertedPrice = [removePeriod intValue];
float exchangeRate;
然后根据选择的货币获取汇率并使用以下代码:
int convertedCurrency = round((double)convertedPrice / exchangeRate);
addCurrency = [NSString stringWithFormat: @"%0d.%02d", (convertedCurrency / 100), (convertedCurrency % 100)];
addCurrency是你的最终价格。
答案 3 :(得分:0)
要处理deciamlas的确切数量,如果所有货币都有2位小数(例如不是JPY),请将所有数字设为分数 例如以4335存储43.35欧元。
然后你可以在算术中使用,然后只使用值/ 100.0和NSNumberFormatter来处理格式化