如何在swift中将逗号添加到数字?

Posted

技术标签:

【中文标题】如何在swift中将逗号添加到数字?【英文标题】:how to add commas to a number in swift? 【发布时间】:2015-06-24 08:13:29 【问题描述】:

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

Example
31908551587 to
31,908,551,587

我很困惑,我不知道该怎么办。

【问题讨论】:

【参考方案1】:

你可以用NSNumberFormatter做到这一点

斯威夫特 4

let largeNumber = 31908551587
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))

斯威夫特 3

 let largeNumber = 31908551587
 let numberFormatter = NumberFormatter()
 numberFormatter.numberStyle = NumberFormatter.Style.decimal
 let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))

斯威夫特 2

 let largeNumber = 31908551587
 let numberFormatter = NSNumberFormatter()
 numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
 let formattedNumber = numberFormatter.stringFromNumber(largeNumber)

【讨论】:

有什么方法可以使用 NumberFormatter 来做这样的 '31,90,85,51,587' 吗? @SanketBhavsar 我不这么认为check @ÖzgürErsil 我用货币(风格)做到了 如何做反向 有什么方法可以将 1000000000000000 转换为 1,000,000,000,000,000 吗?因为这些适用于数字后的七个 0...【参考方案2】:

扩展 Özgür Ersil 的回答,您可以通过扩展至 Int 来隔离功能:

extension Int 
    func withCommas() -> String 
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .decimal
        return numberFormatter.string(from: NSNumber(value:self))!
    

然后在您的代码上使用:

largeNumber.withCommas()

【讨论】:

【参考方案3】:

还扩展了 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)) ?? ""
    

【讨论】:

【参考方案4】:

一个简单的扩展插件,将通过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)) ?? ""
    

使用它:

let number = 31908551587
print(number.delimiter) // 31,908,551,587

【讨论】:

???您的代码实际上与朱利安的答案相同。唯一不同的是他有internal var,而你只有var。你的回答对谈话有什么影响?另外,我会说您的变量 delimiter 具有误导性。 Julien 的commaRepresentation 更有用。【参考方案5】:

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

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSize = 3
numberFormatter.secondaryGroupingSize = 2
numberFormatter.string(from: 10000000)

【讨论】:

当数字包含点 10000000.12 时,此代码不起作用【参考方案6】:

斯威夫特 4

let largeNumber = 31908551587
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value:largeNumber))

【讨论】:

【参考方案7】:

我为金额文本字段创建了一个类。只需将其设置为您的文本字段类。 Ex- 输入 1234567。它将转换为 1,234,567 也适用于小数输入,小数点后取两位数。

class AmountField: UITextField 

private var isFirstDecimal : Bool = true
override func willMove(toSuperview newSuperview: UIView?) 

    addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    keyboardType = .decimalPad
    textAlignment = .left
    placeholder = "0.0"
    editingChanged()

override func deleteBackward() 
    var currentText = self.text ?? ""
    currentText = String(currentText.dropLast())
    self.text = currentText
    editingChanged(self)

@objc func editingChanged(_ textField: UITextField? = nil) 
    var doubleStr = textField?.text ?? "00"


    let decimalCount = doubleStr.components(separatedBy: ".")
    if decimalCount.count > 2 
        var currentText = self.text ?? ""
        currentText = String(currentText.dropLast())
        self.text = currentText
        return
    

    if doubleStr.contains(".") && isFirstDecimal == true 
        self.text = doubleStr
        isFirstDecimal = false
        return
    
    else if !(doubleStr.contains(".")) 
        isFirstDecimal = true
    

    let doubleStrTemp = doubleStr.replacingOccurrences(of: ",", with: "")

    if doubleStrTemp != "" 
        if let n = Decimal(string: doubleStrTemp )?.significantFractionalDecimalDigits 
            if n > 2 
                var currentText = self.text ?? ""
                currentText = String(currentText.dropLast())
                self.text = currentText
                return
            
        
    
    doubleStr = doubleStr.replacingOccurrences(of: ",", with: "")

    let doube = Double(doubleStr)
    let numberFormatter = NumberFormatter()
    numberFormatter.numberStyle = NumberFormatter.Style.decimal
    if doube != nil 
        let formattedNumber = numberFormatter.string(from: NSNumber(value:doube!))
        self.text = formattedNumber
    


extension Decimal 
var significantFractionalDecimalDigits: Int 
    return max(-exponent, 0)

【讨论】:

不,我正在使用 NSNumberFormatter。对于十进制和其他验证,我设置了单独的条件。

以上是关于如何在swift中将逗号添加到数字?的主要内容,如果未能解决你的问题,请参考以下文章

在swift中将逗号添加到字符串整数[关闭]

如何在swift中将数字附加到double

在C#中将逗号添加到整数[重复]

REACT - 如何在 Mui-Datatables 中将逗号分隔符添加到整数值

如何在 Swift 中将 TextField 添加到 UIAlertView

如何在 Swift 3 中将图像添加到 UIAlertbox?