intValue缺少小数

时间:2009-09-10 17:41:31

标签: iphone nsnumber

我需要根据所选货币进行转换。

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);

priceNSNumbervalueForKey也是我设置的转化率的plist文件中的数字。

我遇到的问题是我的price缺少小数。每当我从价格中获得intValue时,它就会向上或向下舍入。我从plist那里得到的汇率存在同样的问题。

我调查了NSNumberFormatter,但它不会让我setFormat代表NSNumberFormatter。有什么建议吗?

4 个答案:

答案 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来处理格式化