如何在Swift中让用户自定义货币格式(基于formatted方法)
借助WWDC21的formatted方法实现Double/Float的货币格式化及相关问题解决
先补全Double/Float类型的基础格式化示例,直接沿用WWDC21里的formatted方法即可:
let price: Double = 29.99 // 格式化指定货币(比如美元) let usdFormatted = price.formatted(.currency(code: "USD")) // 输出 "$29.99" let floatPrice: Float = 15.5 // Float类型同样适用 let jpyFormatted = floatPrice.formatted(.currency(code: "JPY")) // 输出 "¥16"(日元无小数位,会自动取整)
针对你提出的两个问题,具体解决方法如下:
问题1:.currency(code:)支持的货币代码列表及获取本地化标签
- 支持的货币代码:完全遵循ISO 4217标准的三位字母代码,比如USD(美元)、EUR(欧元)、CNY(人民币)、JPY(日元)等,所有合规的代码都能被识别。
- 获取本地化标签:可以通过
Locale的localizedString(forCurrencyCode:)方法,根据当前系统语言返回对应货币的本地化名称。示例代码:
// 获取单个货币代码的本地化名称 if let cnyName = Locale.current.localizedString(forCurrencyCode: "CNY") { print(cnyName) // 中文环境输出 "人民币",英文环境输出 "Chinese Yuan" } // 遍历获取所有常用货币代码及对应标签 for code in Locale.commonISOCurrencyCodes { if let name = Locale.current.localizedString(forCurrencyCode: code) { print("\(code): \(name)") } }
Locale.commonISOCurrencyCodes会返回所有主流的ISO 4217货币代码,足够覆盖绝大多数场景的需求。
问题2:获取系统区域设置对应的默认货币代码
直接通过Locale.current的currencyCode属性就能拿到系统默认区域的货币代码,示例:
// 获取系统默认货币代码 if let systemCurrency = Locale.current.currencyCode { print(systemCurrency) // 系统区域设为美国则输出 "USD",设为日本则输出 "JPY" // 用系统默认货币格式化金额 let systemFormatted = price.formatted(.currency(code: systemCurrency)) print(systemFormatted) }
另外还有更简便的方式:直接调用.currency()不带参数,会自动使用系统默认区域的货币规则格式化:
// 自动使用系统默认货币格式化 let autoFormattedPrice = price.formatted(.currency())
内容的提问来源于stack exchange,提问作者Curious Jorge
相关产品推荐
相关产品推荐

