我想在iOS应用中正确格式化多种货币。
目前,我们的后端将货币价值暴露为最小货币单位的正整数(例如,100美分收取1.00美元或100收取100日元,零十进制货币)。这与我们与付款处理器进行交互时实际产生费用的方式一致。
我的问题是,鉴于货币代码和这个“最小可能的单位”,是否可以使用Foundation的NumberFormatter
来适当地格式化货币?
答案 0 :(得分:2)
根据您存储值的奇怪方式,您似乎需要知道值是否需要分割以及分配多少。
根据您提供的两个示例,您可以通过查看货币的格式化程序设置并获取maximumFractionDigits
的值来执行此操作。用它来计算10的功率需要除以你的数字。然后格式化结果数字。
示例:
let amount = 100 // your raw value
let cf = NumberFormatter()
cf.currencyCode = "USD" // set based on your value
cf.numberStyle = .currency
let factor = pow(10.0, Double(cf.maximumFractionDigits))
let value = Double(amount) / factor
let string = cf.string(for: value)
这导致:
$ 1.00包装
如果使用currencyCode
JPY
运行相同的代码,则结果为:
¥100
确切的输出当然取决于用户的语言环境。