16

我希望我的 iPhone 应用程序允许用户使用适当的符号($、€、₤、¥ 等)输入、显示和存储货币金额。

NSNumberFormatter 会做我需要的一切吗?当用户切换他们的区域设置并且这些金额(美元、日元等)存储为 NSDecimalNumbers 时会发生什么。我认为,为了安全起见,有必要在输入时以某种方式捕获语言环境,然后捕获货币符号并将它们与 NSDecimalNumber ivar 一起存储在我的实例中,以便它们可以在用户更改时展开并在路上适当显示自创建项目以来的语言环境?

抱歉,我几乎没有本地化经验,因此希望在深入研究之前获得一些快速指导。最后,鉴于 iPhone 键盘的限制,您对如何处理此类输入有任何见解吗?

4

1 回答 1

32

NSNumberFormatter 绝对是要走的路!您可以在 NSNumberFormatter 上设置 NSLocale,格式化程序将根据该语言环境自动运行。数字格式化程序的默认语言环境始终是用户选择的区域格式的货币。

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 中,这将像$5.00在 nl-NL 中一样格式化为$ 5,00.

于 2009-05-13T13:29:56.207 回答