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!
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!
Die bisher am meisten abgestimmten Antworten verlassen sich auf NSString-Methoden und erfordern, dass Sie Foundation importiert haben.
Wenn Sie das getan haben, haben Sie jedoch immer noch Zugriff auf NSLog.
Ich denke also, die Antwort auf die Frage, wie man in Swift weiterhin NSLog verwenden kann, lautet einfach:
import Foundation
Hier eine "reine" Swift-Lösung
var d = 1.234567
operator infix ~> {}
@infix func ~> (left: Double, right: Int) -> String {
if right == 0 {
return "\(Int(left))"
}
var k = 1.0
for i in 1..right+1 {
k = 10.0 * k
}
let n = Double(Int(left*k)) / Double(k)
return "\(n)"
}
println("\(d~>2)")
println("\(d~>1)")
println("\(d~>0)")
Was ist mit Erweiterungen für Double- und CGFloat-Typen:
extension Double {
func formatted(_ decimalPlaces: Int?) -> String {
let theDecimalPlaces : Int
if decimalPlaces != nil {
theDecimalPlaces = decimalPlaces!
}
else {
theDecimalPlaces = 2
}
let theNumberFormatter = NumberFormatter()
theNumberFormatter.formatterBehavior = .behavior10_4
theNumberFormatter.minimumIntegerDigits = 1
theNumberFormatter.minimumFractionDigits = 1
theNumberFormatter.maximumFractionDigits = theDecimalPlaces
theNumberFormatter.usesGroupingSeparator = true
theNumberFormatter.groupingSeparator = " "
theNumberFormatter.groupingSize = 3
if let theResult = theNumberFormatter.string(from: NSNumber(value:self)) {
return theResult
}
else {
return "\(self)"
}
}
}
Verwendung:
let aNumber: Double = 112465848348508.458758344
Swift.print("Die Nummer: \(aNumber.formatted(2))")
gibt aus: 112 465 848 348 508.46
Es gibt viele gute Antworten oben, aber manchmal ist ein Muster als das "%.3f" Art von Kauderwelsch angemessener. Hier ist meine Umsetzung mit einem NumberFormatter in Swift 3.
extension Double {
func format(_ pattern: String) -> String {
let formatter = NumberFormatter()
formatter.format = pattern
return formatter.string(from: NSNumber(value: self))!
}
}
let n1 = 0.350, n2 = 0.355
print(n1.format("0.00#")) // 0.35
print(n2.format("0.00#")) // 0.355
Hier wollte ich immer 2 Nachkommastellen anzeigen, aber die dritte nur, wenn sie nicht null war.
Leistung der Erweiterung
extension Double {
var asNumber:String {
if self >= 0 {
var formatter = NSNumberFormatter()
formatter.numberStyle = .NoStyle
formatter.percentSymbol = ""
formatter.maximumFractionDigits = 1
return "\(formatter.stringFromNumber(self)!)"
}
return ""
}
}
let velocity:Float = 12.32982342034
println("Die Geschwindigkeit beträgt \(velocity.toNumber)")
Ausgabe: Die Geschwindigkeit beträgt 12.3
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.