如何在swift中向一个数字添加逗号?

Oma*_*shi 70 xcode swift

我如何将逗号添加到我正在从swift中的JSON中检索的数字中.

Example
31908551587 to
31,908,551,587
Run Code Online (Sandbox Code Playgroud)

我很困惑,我不知道该怎么做.

Özg*_*sil 137

你可以做到 NSNumberFormatter

斯威夫特3

let largeNumber = 31908551587
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))
Run Code Online (Sandbox Code Playgroud)

斯威夫特2

 let largeNumber = 31908551587
 let numberFormatter = NumberFormatter()
 numberFormatter.numberStyle = NumberFormatter.Style.decimal
 let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))
Run Code Online (Sandbox Code Playgroud)

  • @ÖzgürErsil我用货币(风格)做到了 (2认同)

Jua*_*nez 26

扩展ÖzgürErsil的答案,您可以通过扩展到Int来隔离功能:

extension Int {
    func withCommas() -> String {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = NumberFormatter.Style.decimal
        return numberFormatter.string(from: NSNumber(value:self))!
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的代码上使用:

largeNumber.withCommas()
Run Code Online (Sandbox Code Playgroud)


Jul*_*oud 11

在扩展Juan Fran Jimenez的答案时,我建议将格式化程序放入单例中,因为实例化格式化程序通常是一种相对昂贵的操作.(如果您在用户写入时随时进行格式化,则可能会影响性能.)

extension Int {

    private static var commaFormatter: NumberFormatter = {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        return formatter
    }()

    internal var commaRepresentation: String {
        return Int.commaFormatter.string(from: NSNumber(value: self)) ?? ""
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我会考虑做`?? “\(self)”`而不是返回空字符串。 (3认同)

Rik*_*edi 6

这是设置逗号位置的另一种方法。假设我希望将数字 10000000 打印为“1,00,00,000”

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSize = 3
numberFormatter.secondaryGroupingSize = 2
numberFormatter.string(from: 10000000)
Run Code Online (Sandbox Code Playgroud)


Cod*_*der 6

一个简单的扩展名下降将通过扩展名提供变量Int

正如朱利安(Julien)的回答所述,出于性能原因,此方法使用了静态格式化程序。

extension Int {
    private static var numberFormatter: NumberFormatter = {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .decimal

        return numberFormatter
    }()

    var delimiter: String {
        return Int.numberFormatter.string(from: NSNumber(value: self)) ?? ""
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用它:

let number = 31908551587
print(number.delimiter) // 31,908,551,587
Run Code Online (Sandbox Code Playgroud)

  • ??? 您的代码实际上与 Julien 的答案相同。唯一不同的是他有“internal var”,而你只有“var”。你的回答会给谈话增添什么内容?另外,我想说你的变量“分隔符”具有误导性。Julien 的 `commaRepresentation` 更有用。 (2认同)