我想通过编程找出用户iphone上的货币区域设置.这意味着,如果用户在美国store ,货币区域应该是美元,对于澳大利亚,应该是澳元.我这项任务的目的是try 将我们应用程序上列出的商品价格转换为与AppStore要求的价格接近的价格.

例如,如果我们卖一个3美元的视频,一个澳大利亚人想买它,那么我应该在我的应用程序屏幕上显示2.8澳元.这将减少用户对本国实际价格的计算.有人知道怎么做吗?

推荐答案

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

如果你想把它做好,你应该使用NSNumberFormatter.它处理了货币格式之间的所有差异.而且它比你做得更好.因为它适用于所有货币,而不仅仅是你想要支持的4种主要货币.

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

如果你想在应用程序内购买,你不能依赖用户当前的语言环境,因为可以在带有DE(德语)语言环境的设备上使用基于美国的帐户.你的商品价格(在德国实际价格为0.79欧元)将显示为0.99欧元(因为在美国价格为0.99美元).这是错误的.你已经从app store获得了本地化价格,不需要自己计算

您将获得如下格式的正确货币字符串:

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.澳元、美元、欧元等.

Objective-c相关问答推荐

恢复 iOS7 之前的 UINavigationController pushViewController 动画

如何限制 UITextField 中的特殊字符(点和下划线除外)?

跨平台 iPhone/Android 代码共享

如何在运行时向对象添加属性?

将 CFDictionaryRef 转换为 NSDictionary?

从 Unix 时间戳创建 NSDate

使用 UIViewControllerInteractiveTransitioning 委托协议实现自定义 UIViewController 交互式过渡的正确方法

.m 文件中的空@interface 声明是做什么用的?

iOS框架改变一个属性(例如宽度)

如何计算多边形的圆角?

如何在 iPhone SDK 中使用自定义字体?

使用 DatePicker 展开和折叠 UITableViewCells

如何编写 OS X Finder 插件

两个 NSDate 对象之间的区别 - 结果也是一个 NSDate

在 32 位和 64 位架构上格式化 NS(U)Integer 时类型转换的替代方法?

Modal segue,导航栏消失

NSCharacterSet:如何将_添加到 alphanumericCharacterSet 文本限制?

-[MyClassName copyWithZone:] 无法识别的 Select 器发送到实例

在 DEBUG 模式下启用和禁用 NSLog

如何将 UITableView 滚动到特定位置