有没有一种简单的方法在iOS中将货币格式化为string?

我需要一种方法来格式化价格从NSNumber到这样的string:“0.99美元”,而不是“$ 0.99”。

我的游戏使用自定义字体,而且他们不能拥有所有可用App Store货币(如GBP)的符号。 所以我认为最好是回滚到货币的string表示。

对于App Store支持的任何货币,使用的方法应该是绝对可以的。

如果你想要它本地化(即货币在价格的正确方面),这是一个麻烦。

NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithString:@"1.99"]; NSLocale *priceLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"] autorelease]; // get the locale from your SKProduct NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [currencyFormatter setLocale:priceLocale]; NSString *currencyString = [currencyFormatter internationalCurrencySymbol]; // EUR, GBP, USD... NSString *format = [currencyFormatter positiveFormat]; format = [format stringByReplacingOccurrencesOfString:@"¤" withString:currencyString]; // ¤ is a placeholder for the currency symbol [currencyFormatter setPositiveFormat:format]; NSString *formattedCurrency = [currencyFormatter stringFromNumber:price]; 

必须使用从SKProduct获取的语言环境。 不要使用[NSLocale currentLocale]!

–productsRequest:didReceiveResponse – productsRequest:didReceiveResponse:方法给你回SKProducts列表。

每个产品都包含一个包含当前用户产品本地货币的propertyLocale属性。

你可以使用下面的示例代码( 苹果 )来格式化它:

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [numberFormatter setLocale:product.priceLocale]; NSString *formattedString = [numberFormatter stringFromNumber:product.price]; 

祝你好运!

Swift示例:

 var currencyFormatter = NSNumberFormatter() currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle currencyFormatter.locale = priceLocale //SKProduct->priceLocale var currencyString = currencyFormatter.internationalCurrencySymbol var format = currencyFormatter.positiveFormat format = format.stringByReplacingOccurrencesOfString("¤", withString: currencyString) currencyFormatter.positiveFormat = format var formattedCurrency = currencyFormatter.stringFromNumber(price) //SKProduct->price println("formattedCurrency: \(formattedCurrency)")//formattedCurrency: 0,89 EUR 

不错的例子,我在这里findhttp://bendodson.com/weblog/2014/12/10/skproduct-localized-price-in-swift/

 import StoreKit extension SKProduct { @objc func localizedPrice() -> String { let formatter = NSNumberFormatter() formatter.numberStyle = .CurrencyStyle formatter.locale = self.priceLocale return formatter.stringFromNumber(self.price)! } } 

以这种方式使用格式化程序,或者也可以自定义它

 NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 

或者像这样

 [formatter setFormat:@"USD ###.00"]; 

我认为你可以检查国家的货币,并将其存储在string中,并将其提供给格式化程序。

最简单的方法是使用NSNumberFormatter类来根据需要格式化NSNumber值。

虽然这些方法不胜枚举,但它提供了各种各样的输出格式化function,包括应特别感兴趣的setInternationalCurrencySymbol:方法。

SKProduct价格是一个NSDecimalNumber对象,所以你可以这样做的一种方法是扩展NSDecimalNumber类。 这是我的Swift代码:

 extension NSDecimalNumber { func asCurrency(locale:NSLocale) -> String? { var numberFormatter = NSNumberFormatter() numberFormatter.formatterBehavior = NSNumberFormatterBehavior.Behavior10_4 numberFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle numberFormatter.locale = locale return numberFormatter.stringFromNumber(self) } } 

在Objective-C中,它看起来像这样:

 @interface NSDecimalNumber (CurrencyExtension) - (NSString*) asCurrency: (NSLocale *)locale; @end @implementation NSDecimalNumber (DellExtensions) - (NSString*) asCurrency: (NSLocale *)locale { NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [numberFormatter setLocale:product.priceLocale]; return [numberFormatter stringFromNumber:product.price]; } @end