【发布时间】:2020-06-05 05:25:14
【问题描述】:
我正在使用带有货币 numberStyle 的 Swift 的 NumberFormatter。 我设置了以下属性:
let value: Double = 345.23
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 0
formatter.locale = Locale(identifier: "en_US")
formatter.currencyCode = "USD"
print(formatter.string(from: NSNumber(value: value))) //Will print $345 as expected
如果我更改货币并再次打印,我会得到两位小数。为什么?
formatter.currencyCode = "EUR"
print(formatter.string(from: NSNumber(value: value))) //Will print €345.23 with two decimals
这是应该发生的还是一个错误? 如果我将语言环境更改为其他内容,例如“fr_FR”,然后再次返回“en_US”,它将以 0 位小数打印。请参阅 XCTestCase 的附加结果。只有修改了区域设置后,货币才会具有预期的小数位数。
更新:它适用于 iOS 13.3,但不适用于 iOS 12.0 和 11.0.1
【问题讨论】:
-
我无法重现此内容。我得到没有小数位的“€345”
-
好的。感谢您的反馈意见!这让我在不同的操作系统上进行了测试,我发现它适用于 iOS 13.3,但不适用于 iOS 11.01 和 iOS 12.0。
-
您应该在设置其他属性之前设置您的区域设置。当您设置语言环境时,它将为许多格式化程序属性设置默认值。 语言环境决定了许多格式化程序属性的默认值,例如 ISO 国家和语言代码、货币代码、日历、测量系统和小数分隔符。
-
有什么理由不用
Decimal来代表你的价值?相关:stackoverflow.com/questions/3730019/… -
感谢您的回复,Leo Dabus。即使我首先设置了语言环境,但一旦我更改了currencyCode,格式化就会失败。但如上所述,它只发生在 iOS
标签: swift locale currency numberformatter