You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:09:20