मैं एक संख्या में कॉमा को कैसे जोड़ूंगा, जिसे मैं JSON से स्विफ्ट में प्राप्त कर रहा हूं।
Example
31908551587 to
31,908,551,587
मैं बहुत भ्रमित हूँ और मुझे नहीं पता कि क्या करना है।
मैं एक संख्या में कॉमा को कैसे जोड़ूंगा, जिसे मैं 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)
Erzgür Ersil के उत्तर पर विस्तार करते हुए, आप कार्यक्षमता को Int से एक्सेशन के साथ अलग कर सकते हैं:
extension Int {
func withCommas() -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
return numberFormatter.string(from: NSNumber(value:self))!
}
}
फिर अपने कोड पर इस प्रकार उपयोग करें:
largeNumber.withCommas()
इसके अलावा, जुआन फ्रान जिमेनेज़ के उत्तर पर विस्तार करते हुए, मैं फॉर्मेटर को एक सिंगलटन में डालने की सलाह दूंगा, क्योंकि फॉर्मैटर को तुरंत बनाना आमतौर पर एक अपेक्षाकृत महंगा ऑपरेशन है। (यदि आप उपयोगकर्ता द्वारा लिखा गया है तो यह प्रदर्शन को प्रभावित कर सकता है।
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
।
जैसा कि जूलियन के जवाब में कहा गया है, यह प्रदर्शन कारणों से एक स्थिर फ़ॉर्मेटर का उपयोग करता है।
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
भ्रामक है। जुलिएन commaRepresentation
बहुत अधिक उपयोगी है।
यह अल्पविराम स्थिति सेट करने का एक अतिरिक्त तरीका है। मान लीजिए कि मैं चाहता हूं कि संख्या 10000000 को "1,00,00,000" के रूप में मुद्रित किया जाए
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSize = 3
numberFormatter.secondaryGroupingSize = 2
numberFormatter.string(from: 10000000)
मैंने राशि पाठ के लिए एक वर्ग बनाया है। बस इसे अपने टेक्स्टफील्ड क्लास में सेट करें। पूर्व- 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)
}}