iOS

时间:2018-01-11 21:31:41

标签: ios

我想在iOS应用中正确格式化多种货币。

目前,我们的后端将货币价值暴露为最小货币单位的正整数(例如,100美分收取1.00美元或100收取100日元,零十进制货币)。这与我们与付款处理器进行交互时实际产生费用的方式一致。

我的问题是,鉴于货币代码和这个“最小可能的单位”,是否可以使用Foundation的NumberFormatter来适当地格式化货币?

1 个答案:

答案 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

确切的输出当然取决于用户的语言环境。