দ্রুত সংখ্যায় কমা যুক্ত করতে কীভাবে?


87

আমি কীভাবে এমন কোনও সংখ্যায় কমা যুক্ত করব যা আমি দ্রুত JSON থেকে পুনরুদ্ধার করছি।

Example
31908551587 to
31,908,551,587

আমি খুব বিভ্রান্ত এবং আমার কী করতে হবে তা সম্পর্কে কোন ধারণা নেই

উত্তর:


171

আপনি এটি দিয়ে করতে পারেন 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 'এর মতো করার কি কোনও উপায় আছে?
সংকেত_বি

@ সংকেতভাসর আমি তেমন চেক
üzgür এরসিল

4
@ ÖzgürErsil আমি মুদ্রা দিয়ে এটি করেছি (শৈলী)
সংকেত_বি

কীভাবে বিপরীত করবেন
ইয়েস্টে মুরাতভ

1000000000000000000 কে 1,000,000,000,000,000 এ রূপান্তর করার কোনও উপায় আছে ?? কারণ এই সংখ্যার পরে সাত 0 এর জন্য কাজ করে ...
Cemal BAYRI

48

Üzgür এরসিলের উত্তরের প্রসারকে প্রসারিত করে, আপনি প্রসারিতভাবে এক্সটেনশন দিয়ে কার্যকারিতা আলাদা করতে পারবেন:

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

4
??? আপনার কোডটি জুলিয়ানের উত্তরের সাথে কার্যত অভিন্ন। একমাত্র জিনিসটি হ'ল তিনি internal varএবং আপনার কাছে রয়েছে var। আপনার উত্তর কথোপকথনে কী যুক্ত করে? এছাড়াও, আমি বলব আপনার পরিবর্তনশীল delimiterবিভ্রান্তিমূলক। জুলিয়েনস commaRepresentationঅনেক বেশি দরকারী।
জোনকার.ইন.জেনেভা

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 লিখুন It এটি এটিকে 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)
}}

না আমি এনএসএনম্বারফর্মেটর ব্যবহার করছি না। দশমিক এবং অন্যান্য বৈধতার জন্য আমি পৃথক শর্ত রেখেছি।
বিজয় পাতিদার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.