Bevor ich xCode 6 aktualisiert habe, hatte ich keine Probleme, ein Double in einen String umzuwandeln, aber jetzt gibt es einen Fehler
var a: Double = 1.5
var b: String = String(a)
Es gibt mir die Fehlermeldung "double ist nicht in string konvertierbar". Gibt es eine andere Möglichkeit, dies zu tun?
var b = "\(a)"
Antworten:
Es wird nicht umgewandelt, sondern eine Zeichenfolge aus einem Wert mit einem Format erstellt.
Mit einem anderen Format:
Sie können die
format
Eigenschaft auch weglassen, wenn keine Formatierung erforderlich ist.quelle
format:"%.1f" = 1 digit // 1.5
;format:"%.5f" = 5 digits // 1.50000
String(yourDouble)
.Update Xcode 7.1 • Swift 2.1:
Jetzt kann Double auch in String konvertiert werden, sodass Sie es einfach nach Ihren Wünschen verwenden können:
Swift 3 oder höher wir erweitern
LosslessStringConvertible
und generisch machenXcode 11.3 • Swift 5.1 oder höher
Für eine feste Anzahl von Bruchstellen können wir das
FloatingPoint
Protokoll erweitern:Wenn Sie mehr Kontrolle über Ihr Zahlenformat benötigen (minimale und maximale Bruchstellen und Rundungsmodus), können Sie NumberFormatter verwenden:
quelle
String(format: "%.\(digits)f", self as! CVarArg)
durchString(format: "%.*f", digits, self as! CVarArg)
Zusätzlich zur @ Zaph-Antwort können Sie erstellen
extension:
Verwendung:
quelle
a.toString()
von einem anderen Entwickler gesehen wird, wird es definitiv einen WTF-Moment geben.myToString()
, um sicherzustellen, dass es eine benutzerdefinierte Definition hat. Aber wie in anderen Sprachen führt das Prototyping dazu, dass Code-Duplikate und eine gute Wartung vermieden werden.println("output: \(a.toString())")
undprintln("output: \(a)")
. Die zweite Option verursacht keine Kompilierungsfehler. Ist diese Option eine schlechte Praxis?yourDouble?.toString() ?? ""
Swift 3+: Probieren Sie diese Codezeile aus
quelle
Um irgendetwas schnell zu einem String zu machen, außer vielleicht Enum-Werten, machen Sie einfach das, was Sie in der println () -Methode tun
beispielsweise:
quelle
Swift 4 : Verwenden Sie den folgenden Code
quelle
Mit dieser Funktion können Sie die Anzahl der anzuzeigenden Dezimalstellen angeben:
Verwendung:
quelle
String(format:"%."+numberOfDecimalPlaces.description+"f", number)
durchString(format:"%.*f", numberOfDecimalPlaces, number)
Hier gibt es viele Antworten, die eine Vielzahl von Techniken vorschlagen. Wenn Sie jedoch Zahlen in der Benutzeroberfläche anzeigen, möchten Sie ausnahmslos a verwenden,
NumberFormatter
damit die Ergebnisse ordnungsgemäß formatiert, gerundet und lokalisiert werden:Wenn Sie eine feste Anzahl von Dezimalstellen wünschen, z. B. für Währungswerte
Das Schöne an diesem Ansatz ist jedoch, dass er ordnungsgemäß lokalisiert wird, was
10,000.50
in den USA, aber10.000,50
in Deutschland zur Folge hat. Verschiedene Gebietsschemas haben unterschiedliche bevorzugte Formate für Zahlen, und wir solltenNumberFormatter
das vom Endbenutzer bevorzugte Format verwenden, wenn numerische Werte in der Benutzeroberfläche angezeigt werden.Es ist unnötig zu erwähnen, dass dies
NumberFormatter
bei der Erstellung von Zeichenfolgendarstellungen in der Benutzeroberfläche von entscheidender Bedeutung ist. Es sollte jedoch nicht verwendet werden, wenn numerische Werte als Zeichenfolgen für die dauerhafte Speicherung, die Schnittstelle zu Webdiensten usw. geschrieben werden.quelle
In schnellem 3:
quelle
In Swift 3 ist es einfach wie unten angegeben
quelle
"Optional(6.1696108999999995)"
für mich zurück.Das funktioniert bei mir. Sie können es versuchen
quelle
Wenn Sie in Swift 4 ein Double in der Benutzeroberfläche als textLabel "String" ändern und verwenden möchten, können Sie dies am Ende Ihrer Datei hinzufügen:
}}
Und verwenden Sie es so, wenn Sie es in einem Textlabel haben möchten:
Oder drucken Sie es als Int:
quelle
Ich würde den NSNumber- und NumberFormatter-Ansatz bevorzugen (wo nötig). Außerdem können Sie die Erweiterung verwenden, um ein Aufblähen des Codes zu vermeiden
Sie können auch einen umgekehrten Ansatz benötigen
quelle
LossLessStringConvertible
Protokoll auch generischer erweitern , anstatt Doubleextension LosslessStringConvertible { var string: String { return .init(self) } }
Swift 5 : Verwenden Sie den folgenden Code
quelle
String(format: "%.\(points)f", self)
durchString(format: "%.*f", points, self)