以编程方式查找iphone的区域货币

我想以编程方式在用户的iphone上找出货币区域设置。 这意味着,如果用户在美国商店,货币区域应该是美元,澳大利亚应该是澳元。 我的这个任务的目的是尝试将我们的应用程序上列出的物品价格转换成与AppStore询问的价格几乎相匹配。

例如,如果我们卖3美元的video,澳大利亚想要买它,那么我应该在我的应用程序屏幕上显示2.8澳元。 这将减less用户的计算在他的国家的实际价格。 有人知道该怎么做吗?

在大多数情况下,货币符号是不够的。 例如,在德国,我们写下这样的价格:1,99欧元,但是美国的人们使用的是1.99美元。 string有三个不同之处。 货币符号,它的位置和分隔符。

如果你想做正确的,你应该使用一个NSNumberFormatter。 它处理货币格式之间的所有差异。 而且它比你好得多。 因为它适用于所有货币,而不仅仅是您想要支持的四种主要货币。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [formatter setLocale:[NSLocale currentLocale]]; NSString *localizedMoneyString = [formatter stringFromNumber:myCurrencyNSNumberObject]; 

如果您想在应用程序购买中使用此function,则不能依赖用户当前的语言环境,因为可以在具有DE(德语)语言环境的设备上使用基于美国的帐户。 而且你的物品的价格(德国的实际价格是0.79欧元)将显示为0.99欧元(因为它在美国的成本是0.99美元)。 这将是错误的。 您已经从应用程序商店获得了本地化的价格,不需要自己进行计算。
而且你得到了每个SKProducts的价格和价格。

你会得到正确的格式化的货币string像这样:

 SKProduct *product = [self.products objectAtIndex:indexPath.row]; NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [formatter setLocale:product.priceLocale]; currencyString = [formatter stringFromNumber:product.price]; 

编辑:因为你特别要求的货币代码。

你可以用NSString *currencyCode = [formatter currencyCode]; 这将给你货币代码根据ISO 4217.澳元,美元,欧元等。

我使用这些键从语言环境中提取货币符号/代码

 NSLocale *theLocale = [NSLocale currentLocale]; NSString *symbol = [theLocale objectForKey:NSLocaleCurrencySymbol]; NSString *code = [theLocale objectForKey:NSLocaleCurrencyCode]; 

我在我的应用程序中使用下面的代码来检索本地curreny标志,并find分隔符。 我会帮你,

 NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithString:@"50.00"]; NSNumberFormatter *currencyFormat = [[NSNumberFormatter alloc] init]; NSLocale *locale = [NSLocale currentLocale]; [currencyFormat setNumberStyle:NSNumberFormatterCurrencyStyle]; [currencyFormat setLocale:locale]; NSLog(@"Amount with symbol: %@", [currencyFormat stringFromNumber:amount]);//Eg: $50.00 NSLog(@"Current Locale : %@", [locale localeIdentifier]);//Eg: en_US 

谢谢。

 create macro first then use it #define CURRENCY_SYMBOL [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol] NSLog(@"%@ %.2f",CURRENCY_SYMBOL,25.50); 

Matthias Bauch迅速回答:

 var formatter = NSNumberFormatter() formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle formatter.locale = product!.priceLocale var currencyString = "\(formatter.stringFromNumber(product!.price)!)" 

感谢您的回答。 我终于明白,我可以直接从苹果检索价格和货币代码:

 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSArray *products = response.products; if (products && products.count != 0) { product = [products objectAtIndex:0]; [[NSNotificationCenter defaultCenter] postNotificationName:PRICE_UPDATED object:product.LocalizedPrice]; } // finally release the reqest we alloc/init'ed in requestProUpgradeProductData [productsRequest release]; } @implementation SKProduct (LocalizedPrice) - (NSString *)LocalizedPrice { NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [numberFormatter setLocale:self.priceLocale]; NSString *formattedString = [numberFormatter stringFromNumber:self.price]; [numberFormatter release]; return formattedString; } @end