Swift - Wie Sie eine Dezimalzahl aus einem Schwimmer, wenn die Dezimalzahl gleich 0 ist?
Ich bin die Anzeige der Entfernung mit einer Dezimalstelle, und ich möchte, um diese zu entfernen dezimal in Fall ist es gleich 0 (ex: 1200.0 Km), wie kann ich tun, dass in swift?
Ich bin das anzeigen dieser Zahl so:
let distanceFloat: Float = (currentUser.distance! as NSString).floatValue
distanceLabel.text = String(format: "%.1f", distanceFloat) + "Km"
- Mögliche Duplikate von Swift - Entfernen Sie Nachgestellte Nullen Aus Double
Du musst angemeldet sein, um einen Kommentar abzugeben.
Swift 3/4:
Swift 2 (Original-Antwort)
Oder als Erweiterung:
distanceFloat = floor(distanceFloat * 10) / 10
und dann funktionierte es perfekt, danke 🙂Verwenden NSNumberFormatter:
Gibt:
3
5.1
7.21
9.31
600
0.57
0.7
let formatter = NumberFormatter() formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = 1 statLabel.text = formatter.string(from: value as NSNumber) ?? "n/a"
formatter.numberStyle = .decimal
.decimal
nummernstil zahlen unter 1, wird die Anzeige ohne eine null. Z.B.: .5, .78, etc... Bearbeiten nun die Antwort.extension
ist die wirkungsvolle Möglichkeit, es zu tun.Erweiterung:
Code für Swift 2 (nicht Swift 3 oder neuer):
Nutzung:
Beispiel Spielplatz-Datei ist hier.
Update der akzeptierten Antwort für swift 3:
Nutzung wäre nur:
Können Sie eine Erweiterung wie bereits erwähnt, diese Lösung ist ein wenig kürzer aber:
Beispiel:
0.00000001
. Siehe Dokumentation von %g pubs.opengroup.org/onlinepubs/009695399/functions/printf.html: "Der Stil verwendet wird, hängt vom Wert umgewandelt; Stil e (oder E ) wird nur verwendet, wenn der exponent, die aus einer solchen Umwandlung ist weniger als -4 oder größer als oder gleich der Genauigkeit sein."Formatieren String, Folgen diesem Muster
Formatieren Int, Folgen diesem Muster
In Swift 4 versuchen.
//Gewusst wie: verwenden - wenn Sie mehr als zwei Zeichen nach (.)Punkt ist, ist es automatisch zuschneiden das Letzte Zeichen und nur die Anzeige von zwei Zeichen nach dem Punkt.
1.1
: Ausgang"1.10"
.NSNumberFormatter ist dein Freund
Hier ist der vollständige code.
Hier ist die wichtigste Linie in die Tiefe.
Int(number)
.Float(Int(number))
.number - Float(Int(number))
if number - Float(Int(number)) == 0
Die Inhalte innerhalb der if-und else-Anweisungen müssen nicht erklären.
String
und statt derprintln(result)
tunreturn result
. Ich hoffe, das hilft!Formatierung mit maximalen Nachkommastellen, ohne nachfolgende Nullen
Diesem Szenario ist gut, wenn eine benutzerdefinierte Ausgabe-Präzision gewünscht wird.
Diese Lösung scheint in etwa so schnell wie NumberFormatter + NSNumber Lösung von MirekE, aber ein Vorteil könnte sein, dass wir die Vermeidung von NSObject hier.
(funktioniert auch mit
extension Float
, aber nicht die macOS-TypFloat80
)Verwendung:
myNumericValue.string(maximumFractionDigits: 2)
odermyNumericValue.string()
Ausgang für
maximumFractionDigits: 2
:Dies könnte ebenfalls hilfreich sein.
Verwendung:
Vielleicht
stringByReplacingOccurrencesOfString
konnte dir helfen 🙂1.05
ausführenString(format: "%.1f", aFloat)
erste1.0
funktioniert. wenn1.05
ausführenString(format: "%.2f", aFloat)
wird1.05
, und als sollte dies tunstringByReplacingOccurrencesOfString(".00"...)