【发布时间】:2015-12-07 12:57:35
【问题描述】:
我的应用中有一个用于欧元的货币格式化程序。当用户最初将其从任何其他货币设置为欧元时,格式化程序将其显示为€1000。当应用程序重新启动时,它会将其更改为1000 €,有时它甚至会以€1000 € 结尾!知道这里发生了什么吗?
func formatAsCurrency(currencyCode: String) -> String? {
let currencyFormatter = NSNumberFormatter()
let isWholeNumber: Bool = floor(self) == self
currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
currencyFormatter.maximumFractionDigits = isWholeNumber ? 0 : 2
currencyFormatter.minimumFractionDigits = isWholeNumber ? 0 : 2
currencyFormatter.locale = NSLocale(localeIdentifier: currencyCode)
if let currencyString = currencyFormatter.stringFromNumber(self) {
return currencyString
}
return nil
}
【问题讨论】:
-
从货币代码(例如 GBP)创建
NSLocale不会返回有效的语言环境。有关支持的标识符,请参阅NSLocale.availableLocaleIdentifiers() -
我传入
en_GB或我需要的任何语言环境标识符。它只是从我实际上确实在某一时刻通过英镑(这给我带来了一些奇怪的问题)起的糟糕命名。谢谢指出,我会解决的