了解 Swift 中货币的 NumberFormatter
Understanding NumberFormatter for currency in Swift
我有一个应用程序,我试图用 NumberFormetter
格式化 Double
,但我得到的输出与其他应用程序中的输出不匹配。
这是我正在使用的代码...
let price:Double = 25
let currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.numberStyle = .currency
currencyFormatter.locale = NSLocale.current
let priceFormatter = currencyFormatter.string(for: price)
myLabel.text = priceFormatter
使用上面的代码并在我的应用程序中将 phone 的 Region
设置为中国,我得到 25,00 CNY
但在另外两个第三方应用程序中输出是 CN¥25.00
。
我做错了什么?
区域设置为中国:
My App
25,00 CNY
Other Apps
CN¥25.00
区域设置为法国:
My App
25,00€
Other Apps
€25,00
但是当区域设置为 United States
时,我在所有三 (3) 个应用程序中得到相同的符号。
区域设置为美国:
My App
.00
Other Apps
.00
我有点担心区域设置为中国时的输出,因为除了符号不同外,我还得到了不同的符号 CNY
与 CN¥
.
任何建议,我做错了吗?
剧透其他应用程序做错了,你的输出是正确的!
您可以指定the format您想要的输出。例子:
let number: NSNumber = 25
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale.init(identifier: "cn_CN") // or "en_US", "fr_FR"
numberFormatter.positiveFormat = "#0.00 ¤"
let price = numberFormatter.string(from: number)
给出输出
25.00 CN¥
您可以更改格式以获得不同的输出:
"#0.00 ¤" => 25.00 CN¥
"#0.00 ¤¤" => 25.00 CNY
"#0.00 ¤¤¤" => 25.00 Chinese yuan
这完全取决于您想做什么。简而言之,在用户界面中显示结果时,它是设备区域设置的函数,而不是相关货币。
例如,如果我显示的是按今天的汇率兑换成欧元的一万美元,您可能会在具有德语区域设置的设备上显示 8.950,95 €
。货币代码的数字格式和位置都将针对相关设备进行本地化,而不是货币。
但是,如果我在美国设备上显示相同的结果,我可能会使用习惯的美国 number/currency 格式显示它,例如也许 €8,950.95
。
FWIW,English-language 风格指南,例如 芝加哥风格手册 和 经济学人风格指南, 证实了这一点方法。我假设“保持观众对外币的期望”也适用于其他语言。
最重要的是,通常应该根据设备区域设置在用户界面中格式化数字,但显然根据所表示的货币使用货币符号和小数位数。
我有一个应用程序,我试图用 NumberFormetter
格式化 Double
,但我得到的输出与其他应用程序中的输出不匹配。
这是我正在使用的代码...
let price:Double = 25
let currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.numberStyle = .currency
currencyFormatter.locale = NSLocale.current
let priceFormatter = currencyFormatter.string(for: price)
myLabel.text = priceFormatter
使用上面的代码并在我的应用程序中将 phone 的 Region
设置为中国,我得到 25,00 CNY
但在另外两个第三方应用程序中输出是 CN¥25.00
。
我做错了什么?
区域设置为中国:
My App
25,00 CNYOther Apps
CN¥25.00
区域设置为法国:
My App
25,00€Other Apps
€25,00
但是当区域设置为 United States
时,我在所有三 (3) 个应用程序中得到相同的符号。
区域设置为美国:
My App
.00Other Apps
.00
我有点担心区域设置为中国时的输出,因为除了符号不同外,我还得到了不同的符号 CNY
与 CN¥
.
任何建议,我做错了吗?
剧透其他应用程序做错了,你的输出是正确的!
您可以指定the format您想要的输出。例子:
let number: NSNumber = 25
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale.init(identifier: "cn_CN") // or "en_US", "fr_FR"
numberFormatter.positiveFormat = "#0.00 ¤"
let price = numberFormatter.string(from: number)
给出输出
25.00 CN¥
您可以更改格式以获得不同的输出:
"#0.00 ¤" => 25.00 CN¥
"#0.00 ¤¤" => 25.00 CNY
"#0.00 ¤¤¤" => 25.00 Chinese yuan
这完全取决于您想做什么。简而言之,在用户界面中显示结果时,它是设备区域设置的函数,而不是相关货币。
例如,如果我显示的是按今天的汇率兑换成欧元的一万美元,您可能会在具有德语区域设置的设备上显示 8.950,95 €
。货币代码的数字格式和位置都将针对相关设备进行本地化,而不是货币。
但是,如果我在美国设备上显示相同的结果,我可能会使用习惯的美国 number/currency 格式显示它,例如也许 €8,950.95
。
FWIW,English-language 风格指南,例如 芝加哥风格手册 和 经济学人风格指南, 证实了这一点方法。我假设“保持观众对外币的期望”也适用于其他语言。
最重要的是,通常应该根据设备区域设置在用户界面中格式化数字,但显然根据所表示的货币使用货币符号和小数位数。