【发布时间】:2021-04-21 08:26:03
【问题描述】:
我了解NumberFormatter 的默认行为是如果您不在该国家/地区,则将国家/地区代码作为符号的一部分,例如,此测试通过:
func testUSDFromInsideUS() {
let formatter = NumberFormatter()
formatter.currencyCode = "USD"
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "en_US")
XCTAssertEqual("$100.00", formatter.string(from: NSNumber(100)))
}
但是,当区域设置更改为美国以外的国家/地区时,例如 GB,数字格式化程序会将 US 添加到 $ 符号之前:
func testUSDFromOutsideUS() {
let formatter = NumberFormatter()
formatter.currencyCode = "USD"
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "en_GB")
XCTAssertEqual("$100.00", formatter.string(from: NSNumber(100))) // <-- fails because the value is "US$100.00", but I'd like it to be "$100.00".
}
我查看了NumberFormatter 文档,但看不到禁用此行为的属性。我知道这是为了避免与其他 $ 货币混淆。
我是否必须为此编写自己的 NumberFormatter 子类,还是有一种简单的方法来实现这种行为?
【问题讨论】:
-
我认为自定义格式化程序是必需的。
标签: ios swift numbers nsnumberformatter