我有一个应用,我正在尝试使用Double
格式化NumberFormetter
,但我得到的输出与其他应用中的输出不匹配。
以下是我正在使用的代码......
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
使用上面的代码并且在我的应用中将手机的Region
设置为中国,我得到25,00 CNY
,但在另外两个第三方应用中,输出为CN¥25.00
。
我做错了什么?
我的应用程序
25,00 CNY其他应用程序
CN¥25.00
我的应用程序
25,00€其他应用程序
€25,00
但是当区域设置为United States
时,我在所有三(3)个应用中都会得到相同的符号。
我的应用程序
$ 25.00其他应用程序
$ 25.00
我特别关注区域设置为中国时的输出,因为除了符号不同之外,我还得到一个不同的符号CNY
vs CN¥
。
有任何建议,我做错了吗?
答案 0 :(得分:5)
Spoiler其他应用程序做错了,输出正确!
答案 1 :(得分:1)
您可以指定the format您想要输出。例子:
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.DAY_OF_WEEK, 1);
return cal.getTimeInMillis()+ ONE_DAY;
给出输出
25.00人民币
您可以更改格式以获取不同的输出:
“#0.00¤” => 25.00人民币
“#0.00¤¤” => 25.00元
“#0.00¤¤¤” => 25.00人民币
答案 2 :(得分:1)
这完全取决于您要做什么。简而言之,当在用户界面中显示结果时,它取决于设备的语言环境,而不是所涉及的货币。
例如,如果我要显示以今天的汇率将一万美元兑换成欧元,那么您可能会在具有德国语言环境的设备上显示8.950,95 €
。数字格式和货币代码的位置都将针对相关设备(而不是货币)进行本地化。
但是,如果我在美国设备上显示相同的结果,则可能会以惯用的美国数字/货币格式显示该结果,例如也许€8,950.95
。
FWIW的英语风格指南,例如《芝加哥风格手册》 和《经济学家风格指南》 证实了这种方法。我假设“保留受众对外币的期望”也适用于其他语言。
最重要的是,通常应根据设备的区域设置在用户界面中设置数字的格式,但显然应根据所表示的货币使用货币符号和小数位数。