2016-10-08 3 views
0

Ich möchte eine Nummer in meiner App anzeigen, und um es schön zu halten, führende Nullen anzeigen, um das Layout gleichmäßig zu machen.Hinzufügen und Formatieren führender Nullen in einer Zeichenfolge

Zum Beispiel

000 500/500 000 
001 000/500 000 
100 350/500 000 

ich die erste Nummer von einem Int, und ich möchte es in einen String zu formatieren. Gibt es einen guten Weg, um sicherzustellen, dass eine Zahl immer sechsstellig ist, und auch den Bereich der führenden Nullen, um sie anders zu formatieren?

+1

Verwenden 'NSNumberFormatter'. – rmaddy

+0

@MartinR Verstanden, weshalb mein erster Kommentar 'NSNumberFormatter' ist, damit die Nummer für ein bestimmtes Gebietsschema korrekt aussieht. – rmaddy

+0

Das 3-stellige Trennzeichen ist in Leerzeichen lokalisiert? Oder absichtlich unabhängig am Ort gewählt? Nur das Gebietsschema zu folgen, ist möglicherweise nicht das, was das OP erfordert. – OOPer

Antwort

1

Wie wäre es damit?

String-Erweiterung:

extension String { 
    func substring(startIndex: Int, length: Int) -> String { 
     let start = self.startIndex.advancedBy(startIndex) 
     let end = self.startIndex.advancedBy(startIndex + length) 
     return self[start..<end] 
    } 
} 

Nutzung:

var a = 500 
var s = "000000\(a)" 
print(s.substring(s.characters.count - 6, length: 6)) 

a = 500000 
s = "000000\(a)" 
print(s.substring(s.characters.count - 6, length: 6)) 

a = 50 
s = "000000\(a)" 
print(s.substring(s.characters.count - 6, length: 6)) 
+0

Wie verwende ich AdvancedBy in Swift 3? –

+0

werfen Sie einen Blick auf den Migrationsleitfaden von swift 3, https://swift.org/migration-guide/. Es gibt ein Kapitel, das beschreibt, wie man 'advancedBy' in swift3 migriert. Probiere' myCollection.index (meinIndex, offsetBy: ...) ' – Enix

+0

@Enix gute Lösung du machst meinen Tag! –

1

NSNumberFormatter hat alles, was man braucht:

let formatter = NumberFormatter() 
formatter.minimumIntegerDigits = 6 
formatter.numberStyle = .decimal 

print(formatter.string(from: 500)!) 
print(formatter.string(from: 1000)!) 
print(formatter.string(from: 100_350)!) 
+0

Legen Sie kein spezifisches Trennzeichen fest. Behalten Sie die Standardeinstellung für die Ländereinstellung bei, damit jeder Benutzer das richtige Format mit führenden Nullen sieht. – rmaddy

+0

NumberFormatter hat auch keine tausendSeparator-Eigenschaft. –

+0

Ich benutze das OS X SDK, also ist 'thousandSeparator' immer noch da. Nicht erkennen, dass es die alte (vor 10.4) Art ist, Dinge zu tun. Verwenden Sie stattdessen "groupingSeparator" –

Verwandte Themen