我正在使用StoreKit
在我的应用程序中实现应用程序内购买商店。
我有一个自定义设计,这意味着价格的值应为白色且较大,货币符号应更小,更暗且与价格值的顶部对齐。
通过使用NSLocale
的SKproduct
属性中的priceLocale
和price
属性中的价格值,我可以毫无问题地获得货币符号。
我的问题是知道何时应该在价格前放置货币符号,何时在价格后放置货币符号。
例子:
我可以轻松地使用
NSNumberFormatter
来“立即使用”,但是由于我的布局为值和货币符号定义了不同的样式,因此我发现自己处于需要更多手动解决方法的位置。有什么想法吗 ?
最佳答案
语言环境对象似乎并没有直接提供此信息,但是数字格式化程序当然必须知道这一点。尽管这可能会起作用,但您不应该直接向(新型)数字格式程序询问其format
,然后可以在格式字符串中查找货币符号¤
。
可能更好的方法是创建一个CFNumberFormatter
,它确实允许您查看其格式,然后检查该字符串:
// NSLocale and CFLocale are toll-free bridged, so if you have an existing
// NSNumberFormatter, you can get its locale and use that instead.
CFLocaleRef usLocale = CFLocaleCreate(NULL, CFSTR("en_US"));
CFNumberFormatterRef usFormatter = CFNumberFormatterCreate(NULL, usLocale, kCFNumberFormatterCurrencyStyle);
CFLocaleRef frLocale = CFLocaleCreate(NULL, CFSTR("fr_FR"));
CFNumberFormatterRef frFormatter = CFNumberFormatterCreate(NULL, frLocale, kCFNumberFormatterCurrencyStyle);
NSString * usString = (__bridge NSString *)CFNumberFormatterGetFormat(usFormatter);
NSString * frString = (__bridge NSString *)CFNumberFormatterGetFormat(frFormatter);
NSUInteger loc = ([usString rangeOfString:@"¤"]).location;
NSLog(@"Currency marker at beginning for US? %@", (loc == 0) ? @"YES" : @"NO");
loc = ([frString rangeOfString:@"¤"]).location;
NSLog(@"Currency marker at end for FR? %@", (loc == [frString length] - 1) ? @"YES" : @"NO");
关于objective-c - NSLocale货币符号,显示在金额值之前或之后,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12253594/