Swift中NumberFormatter设置ARS货币代码时未输出货币符号的问题
问题原因
NumberFormatter的货币格式化逻辑默认绑定当前设备的Locale(区域设置):当设置的货币代码不属于当前区域的流通货币时,系统会默认用ISO标准货币代码替代专用货币符号输出,避免用户对陌生货币符号产生识别歧义,这就是输出为ARS 59.00而非带符号格式的核心原因。
解决方案
根据业务场景二选一即可:
- 面向阿根廷本地用户的场景:手动将格式化器的区域设置为阿根廷对应的
es_AR(阿根廷西班牙语),会自动匹配当地标准的货币符号、数字分隔规则,代码如下:
let formatter = NumberFormatter() formatter.currencyCode = "ARS" formatter.numberStyle = .currency // 指定阿根廷本地区域 formatter.locale = Locale(identifier: "es_AR") print(formatter.string(from: NSNumber(value: 59.00)) ?? "na") // 本地环境下输出为:$ 59,00(西语区域用逗号作为小数分隔符)
- 面向非阿根廷区域用户展示ARS金额的场景:不需要改动区域分隔规则的前提下,可手动指定
currencySymbol属性自定义展示的货币符号,建议加专属标识避免和同符号的其他货币(比如美元)混淆,代码如下:
let formatter = NumberFormatter() formatter.currencyCode = "ARS" formatter.numberStyle = .currency // 自定义货币符号,可按需调整 formatter.currencySymbol = "AR$" print(formatter.string(from: NSNumber(value: 59.00)) ?? "na") // 输出会沿用当前系统的数字分隔规则,示例:AR$59.00
注意:不同区域的货币格式化规则除了货币符号,还会影响小数分隔符、千位分隔符、符号与金额的相对位置、小数位数,选择方案时要匹配目标用户的使用习惯。
内容的提问来源于stack exchange,提问作者sheldor
相关产品推荐
相关产品推荐

