我正在使用StoreKit在我的应用程序中实现应用程序内购买商店。

我有一个自定义设计,这意味着价格的值应为白色且较大,货币符号应更小,更暗且与价格值的顶部对齐。

通过使用NSLocaleSKproduct属性中的priceLocaleprice属性中的价格值,我可以毫无问题地获得货币符号。

我的问题是知道何时应该在价格前放置货币符号,何时在价格后放置货币符号。

例子:

  • $ 5,99
  • 0,79€

  • 我可以轻松地使用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/

    10-12 14:42