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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:02:19