有没有一种简单的方法在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