2015-06-24 11 views

Odpowiedz

85

Można to zrobić z NSNumberFormatter

Swift 3

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

Swift 2

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

Dziękuję bardzo, że zadziałało! –

+0

jest jakikolwiek sposób, aby zrobić, jak to "31, 90,85,51,587" za pomocą NumberFormatter? –

+0

@SanketBhavsar Nie sądzę, że tak [sprawdź] (https://developer.apple.com/reference/foundation/numberformatter.style) –

6

Rozwijając na odpowiedź ozgur Ersil, można wyizolować funkcjonalność z extesion do Int:

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

Aby następnie wykorzystać na kodzie jak:

largeNumber.withCommas() 
5

rozszerza także na odpowiedź Juan Fran Jiménez, polecam umieszczenie formatowania w Singleton, od instancji do formatowania jest zazwyczaj stosunkowo kosztowna operacja. (Może to wpłynąć na wydajność, jeśli formatujesz w trakcie pisania, jak pisze użytkownik.)

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)) ?? "" 
    } 
} 
Powiązane problemy