我有一个关于添加千位分隔符的问题。
我有三种类型的数字字符串。
我在堆栈here.中找到了答案
但我尝试使用它,但未能添加千位分隔符。
对我有什么想法吗?谢谢。
let str = "1000"
let string1 = "5000.000"
let string2 = "2000.0"
let convertStr = str.formattedWithSeparator //in playground, get error 「Value of type 'String' has no member 'formattedWithSeparator'」.
let convertStr1 = Float(string1)!.formattedWithSeparator //get error too.
let convertStr2 = Float(string2)!.formattedWithSeparator //get error too.
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.groupingSeparator = ","
formatter.numberStyle = .decimal
return formatter
}()
}
extension BinaryInteger {
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
答案 0 :(得分:7)
数字格式化程序不能以“数字字符串”开头;它们以 number 开头。因此,例如,使用Formatter扩展代码,您已经拥有:
let n = 5000
let s = Formatter.withSeparator.string(for: n)
// s is now "5,000"
但是,假设您开始时实际上是一个字符串。然后您可以说,例如:
let str = "5000"
let s = Formatter.withSeparator.string(for: Float(str)!)
// s is now "5,000"
观察到此过程中会丢失小数信息。如果这对您很重要,则需要将该要求添加到格式化程序本身。您正在制作一个字符串,并且必须提供有关该字符串外观的所有信息。例如:
let str = "5000.00"
let f = Formatter.withSeparator
f.minimumFractionDigits = 2
let s = f.string(for: Float(str)!)
// s is now "5,000.00"
如果省略mimimumFractionDigits
信息,您将再次获得"5,000"
;我们开始使用的字符串的原始外观完全不重要。
答案 1 :(得分:0)
您可以使用此方法
func currencyMaker(price: NSNumber) -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.groupingSeparator = ","
let formattedNumber = numberFormatter.string(from: price)
return formattedNumber!
}
像这样:
let myNumber1 = currencyMaker(price: 2000)
let myNumber2 = currencyMaker(price: 5983223)
打印为:
print(myNumber1) // 2,000
print(myNumber2) // 5,983,223