如何在Int和Float类型中添加千位分隔符?

Jim*_*Lee 3 ios swift

我有一个关于添加千分隔符的问题.
我有三种类型的数字字符串.
我在这里找到答案.
但我尝试使用它,并没有添加千分隔符.
对我有任何想法吗?谢谢.

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) ?? ""
    }
}
Run Code Online (Sandbox Code Playgroud)

mat*_*att 7

数字格式化程序不以"数字字符串"开头; 他们从一个数字开始.因此,例如,使用您已经拥有的Formatter扩展代码:

let n = 5000
let s = Formatter.withSeparator.string(for: n)
// s is now "5,000"
Run Code Online (Sandbox Code Playgroud)

但是,让我们说你真正开始的是一个字符串.然后你可以说,例如:

let str = "5000"
let s = Formatter.withSeparator.string(for: Float(str)!)
// s is now "5,000"
Run Code Online (Sandbox Code Playgroud)

注意在此过程中丢失了小数信息.如果这对您很重要,则需要将该要求添加到格式化程序本身.您正在创建一个字符串,您必须提供有关您希望该字符串的外观的所有信息.例如:

let str = "5000.00"
let f = Formatter.withSeparator
f.minimumFractionDigits = 2
let s = f.string(for: Float(str)!)
// s is now "5,000.00"
Run Code Online (Sandbox Code Playgroud)

如果省略mimimumFractionDigits信息,你会"5,000"再次获得; 我们开始使用的字符串的原始外观完全不重要.