Swift 即使货币符号为空,NumberFormatter 也会将 Unicode 空格附加到货币字符串
Swift NumberFormatter appends Unicode spaces to currency strings even when the currency symbol is blank
在 iOS13 中,似乎在某些语言环境中,NumberFormatter
将 Unicode NO-BREAK SPACE 或 NARROW NO-BREAK SPACE 附加到字符串表示形式数字,即使 NumberFormatter's
currencySymbol
属性 设置为“”(空白)。
这是一个例子:
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.currencySymbol = ""
numberFormatter.locale = Locale(identifier: "uk_US (current)")
let numberString = numberFormatter.string(from: NSNumber(value: 1))!
print ("-->\(numberString)<--")
有谁知道抑制附加 space 的方法,而不必从其他代码中的每个转换字符串中过滤掉它?
您可以设置自己的正面和负面格式来避免这种情况。请注意,您应该始终在设置格式之前设置语言环境,并且无需从您的值初始化 NSNumber
对象,您可以使用 Formatter
的 string(for:)
方法:
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "uk_US")
numberFormatter.numberStyle = .currency
numberFormatter.positiveFormat = "##0.00"
numberFormatter.negativeFormat = "-##0.00"
let value: Double = 1
let numberString = numberFormatter.string(for: value) ?? "" // "1,00"
print ("-->\(numberString)<--") // "-->1,00<--\n"
对于可能没有小数位的语言环境:
let numberFormatter = NumberFormatter()
// numberFormatter.locale = Locale(identifier: "ja_JP")
numberFormatter.numberStyle = .currency
let digits = numberFormatter.minimumFractionDigits
let zeros = digits == 0 ? "" : "." + String(repeating: "0", count: digits)
numberFormatter.positiveFormat = "##0" + zeros
numberFormatter.negativeFormat = "-##0" + zeros
let value: Double = 1
let numberString = numberFormatter.string(for: value) ?? "" // "1"
print ("-->\(numberString)<--") // "-->1<--\n"
在 iOS13 中,似乎在某些语言环境中,NumberFormatter
将 Unicode NO-BREAK SPACE 或 NARROW NO-BREAK SPACE 附加到字符串表示形式数字,即使 NumberFormatter's
currencySymbol
属性 设置为“”(空白)。
这是一个例子:
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.currencySymbol = ""
numberFormatter.locale = Locale(identifier: "uk_US (current)")
let numberString = numberFormatter.string(from: NSNumber(value: 1))!
print ("-->\(numberString)<--")
有谁知道抑制附加 space 的方法,而不必从其他代码中的每个转换字符串中过滤掉它?
您可以设置自己的正面和负面格式来避免这种情况。请注意,您应该始终在设置格式之前设置语言环境,并且无需从您的值初始化 NSNumber
对象,您可以使用 Formatter
的 string(for:)
方法:
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: "uk_US")
numberFormatter.numberStyle = .currency
numberFormatter.positiveFormat = "##0.00"
numberFormatter.negativeFormat = "-##0.00"
let value: Double = 1
let numberString = numberFormatter.string(for: value) ?? "" // "1,00"
print ("-->\(numberString)<--") // "-->1,00<--\n"
对于可能没有小数位的语言环境:
let numberFormatter = NumberFormatter()
// numberFormatter.locale = Locale(identifier: "ja_JP")
numberFormatter.numberStyle = .currency
let digits = numberFormatter.minimumFractionDigits
let zeros = digits == 0 ? "" : "." + String(repeating: "0", count: digits)
numberFormatter.positiveFormat = "##0" + zeros
numberFormatter.negativeFormat = "-##0" + zeros
let value: Double = 1
let numberString = numberFormatter.string(for: value) ?? "" // "1"
print ("-->\(numberString)<--") // "-->1<--\n"