457 Stimmen

Präzisionszeichenfolge-Formatierungszeichen in Swift

Im Folgenden wird gezeigt, wie ich zuvor einen Float auf zwei Dezimalstellen gekürzt hätte

NSLog(@" %.02f %.02f %.02f", r, g, b);

Ich habe die Dokumentation und das eBook überprüft, aber bisher nicht herausfinden können. Vielen Dank!

889voto

realityone Punkte 13602

Der folgende Code:

import Foundation // erforderlich für String(format: _, _)

print(String(format: "eine Fließkommazahl: %.2f", 1.0321))

wird folgendes ausgeben:

eine Fließkommazahl: 1.03

317voto

Anton Tcholakov Punkte 3640

Meine bisher beste Lösung, basierend auf David's Antwort:

import Foundation

extension Int {
    func format(f: String) -> String {
        return String(format: "%\(f)d", self)
    }
}

extension Double {
    func format(f: String) -> String {
        return String(format: "%\(f)f", self)
    }
}

let someInt = 4, someIntFormat = "03"
println("Die Integer-Nummer \(someInt) formatiert mit \"\(someIntFormat)\" sieht aus wie \(someInt.format(someIntFormat))")
// Die Integer-Nummer 4 formatiert mit "03" sieht aus wie 004

let someDouble = 3.14159265359, someDoubleFormat = ".3"
println("Die Gleitkommazahl \(someDouble) formatiert mit \"\(someDoubleFormat)\" sieht aus wie \(someDouble.format(someDoubleFormat))")
// Die Gleitkommazahl 3.14159265359 formatiert mit ".3" sieht aus wie 3.142

Ich denke, das ist die Swift-ähnlichste Lösung, indem die Formatierungsoperationen direkt mit dem Datentyp verknüpft werden. Es könnte gut sein, dass es irgendwo bereits eine Bibliothek von Formatierungsoperationen gibt, oder vielleicht wird eine bald veröffentlicht. Beachten Sie, dass die Sprache noch in der Beta-Phase ist.

133voto

Valentin Punkte 3302

Ich fand String.localizedStringWithFormat ziemlich gut zu funktionieren:

Beispiel:

let Wert: Float = 0.33333
let Einheit: String = "mph"

deinUILabel.text = String.localizedStringWithFormat("%.2f %@", Wert, Einheit)

98voto

fatihyildizhan Punkte 7773

Dies ist eine sehr schnelle und einfache Methode, die keine komplexe Lösung benötigt.

let dauer = String(format: "%.01f", 3.32323242)
// Ergebnis = 3.3

76voto

Donn Punkte 1680

Die meisten Antworten hier sind gültig. Wenn Sie jedoch die Nummer oft formatieren werden, sollten Sie erwägen, die Float-Klasse zu erweitern, um eine Methode hinzuzufügen, die einen formatierten String zurückgibt. Siehe unten stehenden Beispielcode. Dieses erreicht das gleiche Ziel durch Verwendung eines Nummernformatters und einer Erweiterung.

extension Float {
    func string(fractionDigits:Int) -> String {
        let formatter = NSNumberFormatter()
        formatter.minimumFractionDigits = fractionDigits
        formatter.maximumFractionDigits = fractionDigits
        return formatter.stringFromNumber(self) ?? "\(self)"
    }
}

let myVelocity:Float = 12.32982342034

println("Die Geschwindigkeit beträgt \(myVelocity.string(2))")
println("Die Geschwindigkeit beträgt \(myVelocity.string(1))")

Die Konsole zeigt:

Die Geschwindigkeit beträgt 12.33
Die Geschwindigkeit beträgt 12.3

SWIFT 3.1 Update

extension Float {
    func string(fractionDigits:Int) -> String {
        let formatter = NumberFormatter()
        formatter.minimumFractionDigits = fractionDigits
        formatter.maximumFractionDigits = fractionDigits
        return formatter.string(from: NSNumber(value: self)) ?? "\(self)"
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X