Format currency with NumberFormatter replace default locale currency code(用数字格式设置货币替换默认区域设置货币代码)
本文介绍了用数字格式设置货币替换默认区域设置货币代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的模型中,我将价格存储为NSDecimalNumber值。
struct Item {
var price: NSDecimalNumber // eg. 3.543
var currencyCode: String // eg. "USD"
}
我希望使用用户的Locale正确显示它们。我找到了使用NumberFormatter:的解决方案
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = item.currencyCode
formatter.string(from: item.price)
不出所料,它会根据用户的区域设置提供不同的结果。
如果我将formatter.currencyCode设置为USD:
- 对于
"en_US":"$3.543" - 对于
"fr_CA":"US$3.543" - 对于
"de_DE":"3,543 US$" - 对于
"da_DK":"3,543 US$"
如果我将formatter.currencyCode设置为DKK:
- 对于
"en_US":"DKK 3.543" - 对于
"fr_CA":"DKK 3.543" - 对于
"de_DE":"3,543 DKK" - 对于
"da_DK":"3,543 kr."
问题是,对于更奇特的货币(如丹麦克朗),格式化程序使用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."
我如何才能做到这一点?或者我应该坚持Locale.current的设置而不去碰它吗?
注意:我不能只对数字使用NumberFormatter,然后手动添加货币符号,因为可以将符号分配给不同的货币:$3.543是以美元表示的价格,但在fr_CA Locale中是以CAD表示的价格。
编辑按照评论中的建议,我将价格类型更改为NSDecimalNumber。
推荐答案
如果您确实要使用问题中的格式,则可以在更改区域设置后单独设置货币符号
formatter.locale = Locale(identifier: "en_US")
formatter.currencySymbol = Locale.current.currencySymbol
if let str = formatter.string(for: 123.45) {
print(str)
}
KR:123.45
如果货币没有符号,我建议您改用货币代码,或者您需要维护您自己的货币代码/符号对列表。
这篇关于用数字格式设置货币替换默认区域设置货币代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:用数字格式设置货币替换默认区域设置货币代码
基础教程推荐
猜你喜欢
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
