स्विफ्ट में किसी संख्या में अल्पविराम कैसे जोड़ें?


85

मैं एक संख्या में कॉमा को कैसे जोड़ूंगा, जिसे मैं JSON से स्विफ्ट में प्राप्त कर रहा हूं।

Example
31908551587 to
31,908,551,587

मैं बहुत भ्रमित हूँ और मुझे नहीं पता कि क्या करना है।

जवाबों:


169

आप इसके साथ कर सकते हैं 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)

क्या इस तरह के '31, 90,85,51,587 'नंबरफ़ॉर्म्टर का उपयोग करने का कोई तरीका है?
Sanket_B

@SanketBhavsar मुझे नहीं लगता है तो जाँच
Özgür Ersil

2
@ WithzgürErsil मैंने इसे मुद्रा (शैली)
Sanket_B

रिवर्स कैसे करें
Yestay Muratov

क्या 1000000000000000 को 1,000,000,000,000,000 में बदलने का कोई तरीका है ?? क्योंकि ये संख्या के बाद सात ० के लिए काम करता है ...
Cemal BAYRI

43

Erzgür Ersil के उत्तर पर विस्तार करते हुए, आप कार्यक्षमता को Int से एक्सेशन के साथ अलग कर सकते हैं:

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

फिर अपने कोड पर इस प्रकार उपयोग करें:

largeNumber.withCommas()

12

इसके अलावा, जुआन फ्रान जिमेनेज़ के उत्तर पर विस्तार करते हुए, मैं फॉर्मेटर को एक सिंगलटन में डालने की सलाह दूंगा, क्योंकि फॉर्मैटर को तुरंत बनाना आमतौर पर एक अपेक्षाकृत महंगा ऑपरेशन है। (यदि आप उपयोगकर्ता द्वारा लिखा गया है तो यह प्रदर्शन को प्रभावित कर सकता है।

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

10

विस्तार में एक सरल गिरावट जो एक विस्तार के माध्यम से एक चर प्रदान करेगी Int

जैसा कि जूलियन के जवाब में कहा गया है, यह प्रदर्शन कारणों से एक स्थिर फ़ॉर्मेटर का उपयोग करता है।

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

1
??? आपका कोड व्यावहारिक रूप से जूलियन के जवाब के समान है। केवल एक चीज वह अलग है internal varऔर आपके पास बस है var। आपका जवाब बातचीत में क्या जोड़ता है? इसके अलावा, मैं कहूंगा कि आपका वैरिएबल delimiterभ्रामक है। जुलिएन commaRepresentationबहुत अधिक उपयोगी है।
Zonker.in.Geneva

2

यह अल्पविराम स्थिति सेट करने का एक अतिरिक्त तरीका है। मान लीजिए कि मैं चाहता हूं कि संख्या 10000000 को "1,00,00,000" के रूप में मुद्रित किया जाए

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

1

स्विफ्ट 4

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

0

मैंने राशि पाठ के लिए एक वर्ग बनाया है। बस इसे अपने टेक्स्टफील्ड क्लास में सेट करें। पूर्व- 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 का उपयोग कर रहा हूं। दशमलव और अन्य सत्यापन के लिए मैंने अलग-अलग शर्तें रखीं।
विजय पाटीदार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.