使用NumberFormatter格式化货币替换默认区域设置货币代码

问题描述 投票:0回答:1

在我的模型中,我将价格存储为Double值。

struct Item {
    var price: Double // eg. 3.543
    var currencyCode: String // eg. "USD"
}

我想使用用户的Locale正确显示它们。我找到了使用NumberFormatter的解决方案:

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = item.currencyCode

formatter.string(from: NSNumber(value: item.price))

按预期,它会根据用户的区域设置给出不同的结果。

如果我将formatter.currencyCode设置为USD

  • 对于“ en_US”:“ $ 3.543”
  • 对于“ fr_CA”:“ US $ 3.543”
  • 对于“ de_DE”:“ 3,543美元”
  • 对于“ da_DK”:“ 3,543美元”

如果我将formatter.currencyCode设置为DKK

  • 对于“ zh_CN”:“ DKK 3.543”
  • 对于“ fr_CA”:“ DKK 3.543”
  • 对于“ de_DE”:“ 3,543 DKK”
  • 对于“ da_DK”:“ 3,543 kr。”

问题是,在使用更多外来货币(例如DKK-丹麦克朗)的情况下,格式化程序使用currencyCode代替currencySymbol。我觉得用符号代替代码更有意义。

理想情况是,我希望将formatter.currencyCode设置为DKK

  • 对于“ en_US”:“ kr。3.543”
  • 对于“ fr_CA”:“ kr。3.543”
  • 对于“ de_DE”:“ 3,543 kr。”
  • 对于“ da_DK”:“ 3,543 kr。”

我该如何实现?还是应该坚持[C0​​]的设置方式而不要触摸它?

注意:我不能仅将Locale.current用于数字,然后手动添加货币符号,因为可以将符号分配给不同的货币:NumberFormatter$3.543中的美元价格,但在en_US Locale中]这是CAD价格。

ios swift locale
1个回答
0
投票

如何编写从fr_CA Locale中获取currencySymbol的函数?

currencyCode

“可以将符号分配给不同的货币”-我不认为这应该是问题

© www.soinside.com 2019 - 2024. All rights reserved.