我希望我的iPhone应用程序允许使用适当的符号($,€,₤,¥等)为用户输入,显示和存储货币金额。
NSNumberFormatter会做我需要的一切吗?用户切换其区域设置时会发生什么,这些金额(美元,日元等)存储为NSDecimalNumbers。我假设,为了安全起见,有必要以某种方式捕获输入时的区域设置,然后是货币符号并将它们与NSDecimalNumber ivar一起存储在我的实例中,以便在用户更改时可以将它们展开并在路上正确显示自项目创建以来的区域设置?
抱歉,我没有很少的本地化经验,所以希望在潜入之前提供一些快速指示。最后,考虑到iPhone键盘的限制,有关如何处理这种输入的任何见解?
答案 0 :(得分:32)
NSNumberFormatter绝对是您要走的路!您可以在上面设置NSLocale NSNumberFormatter,格式化程序将根据该语言环境自动运行。数字格式化程序的默认语言环境始终是用户所选区域格式的货币。
NSDecimalNumber *someAmount = [NSDecimalNumber decimalNumberWithString:@"5.00"];
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLog(@"%@", [currencyFormatter stringFromNumber:someAmount]);
这将根据用户默认区域格式记录金额“5.00”。如果您想更改您可以设置的货币:
NSLocale *aLocale = [[NSLocale alloc] initWithLocaleIdentifier: "nl-NL"]
[currencyFormatter setLocale:aLocale];
将选择该区域设置的默认货币。
通常情况下,您不是按照用户的本地货币收费,而是使用自己的货币收费。要强制NSNumberFormatter
格式化您的货币,同时保持用户偏好中的数字格式,请使用:
currencyFormatter.currencyCode = @"USD"
currencyFormatter.internationalCurrencySymbol = @"$"
currencyFormatter.currencySymbol = @"$"
在en-US中,这将在nl-NL格式为$5.00
$ 5,00
。