itsource

숫자에 쉼표를 빠르게 추가하는 방법은 무엇입니까?

mycopycode 2023. 8. 5. 10:07
반응형

숫자에 쉼표를 빠르게 추가하는 방법은 무엇입니까?

JSON에서 빠르게 검색하는 번호에 쉼표를 추가하려면 어떻게 해야 합니까?

Example
31908551587 to
31,908,551,587

저는 너무 혼란스럽고 어떻게 해야 할지 모르겠어요.

로 할 수 있습니다.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)

Ozgür Ersil의 답변을 확장하면 Int:로 확장하여 기능을 분리할 수 있습니다.

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

그런 다음 코드에서 다음과 같이 사용합니다.

largeNumber.withCommas()

또한 Juan Fran Himenez의 답변을 확장하면 포맷터를 인스턴스화하는 것이 일반적으로 상대적으로 비용이 많이 들기 때문에 싱글톤으로 넣는 것을 권장합니다.(사용자가 쓰는 대로 이동 중에 포맷할 경우 성능에 영향을 미칠 수 있습니다.)

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)) ?? ""
    }
}

확장을 통해 변수를 제공하는 확장의 단순한 감소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

이것은 쉼표 위치를 설정하는 추가적인 방법입니다.예를 들어 10000000이라는 숫자가 "1,00,00,000"으로 인쇄되기를 원합니다.

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

양 텍스트 필드에 대한 클래스를 만들었습니다.텍스트 필드 클래스로 설정하기만 하면 됩니다.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)
}}

스위프트 4

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

스위프트 5

레이블에 사용하려는 경우:

private func formatNumberToThousand(number: Int) -> String {
    let numberFormatter = NumberFormatter()
    numberFormatter.numberStyle = .decimal
    numberFormatter.groupingSeparator = "."
    let formattedNumber = numberFormatter.string(from: NSNumber(value: number))
    return formattedNumber ?? ""
}

사용 방법:

let thousand = 193843
yourLabel.text = formatNumberToThousand(number: thousand)
//Output: 193.843

언급URL : https://stackoverflow.com/questions/31021197/how-to-add-commas-to-a-number-in-swift

반응형