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 - 拆分 Drawable 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01