我在iOS应用中使用In App Purchases。我想根据用户/设备以正确的格式显示价格。
这是我的代码:
let price=product.price
let numberFormatter = NumberFormatter()
numberFoxrmatter.formatterBehavior = .behavior10_4 //doesn't change anything if I remove this line
numberFormatter.numberStyle = .currency
numberFormatter.locale = product.priceLocale
let formattedPrice=numberFormatter.string(from: price)
但是货币符号不是一个好符号,并且/或者在某些情况下放错了位置。 在我的示例中,价格产品为 $ 19.99 或 20,99€。
示例
从设备上:
product.priceLocale
:en_FR@currency=EUR (fixed)
Locale.current
:en_FR (current)
输出:€20,99
应显示:20,99€
来自模拟器:
product.priceLocale
:en_FR@currency=EUR (fixed)
Locale.current
:en_US (current)
输出:20.99美元
应显示:20,99€或19.99美元
我有几个与其他货币有相同问题的用户,应该在价格后放置符号,这与美元格式不同。另一个用户看到的是 $ 7290而不是7290₸(价格相差很大……)。
我很确定这与语言设置或Locale.current
有关。但是,如果我在设备上将主要语言更改为法语,则价格为“€20,99”。奇怪的是我的Locale.current
切换到en_US (current)
。
有什么办法解决这个问题?
我很满意的另一种解决方案:以美元显示所有人的价格,无论用户使用哪种语言和币种。
答案 0 :(得分:1)
区域设置是正确输出的关键。 en_FR读起来像英语和法语区域。这将导致英语讲者的格式化输出,法语价格为->€10.00
使用模拟器并将地区和语言设置为法语,并使用Locale.current。它应该读取fr_FR并给出正确的输出。 10,00€
您是否尝试在模拟器上更改语言和区域,这会影响priceLocale吗?
答案 1 :(得分:0)
尝试一下
let currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.numberStyle = .currency
// localize to your grouping and decimal separator
currencyFormatter.locale = Locale.current
// We'll force unwrap with the !, if you've got defined data you may need more error checking
let priceString = currencyFormatter.string(from: 9999.99)!
print(priceString) // Displays $9,999.99 in the US locale
示例
currencyFormatter.locale = Locale(identifier: "fr_FR")
if let priceString = currencyFormatter.string(from: 9999.99) {
print(priceString) // Displays 9 999,99 € in the French locale
}