Ich zeige einen Abstand mit einer Dezimalstelle an und möchte diese Dezimalstelle entfernen, falls sie gleich 0 ist (z. B. 1200,0 km). Wie kann ich das schnell tun? Ich zeige diese Nummer folgendermaßen an:
let distanceFloat: Float = (currentUser.distance! as NSString).floatValue
distanceLabel.text = String(format: "%.1f", distanceFloat) + "Km"
ios
swift
floating-point
Kali Aney
quelle
quelle
Antworten:
Swift 3/4:
Swift 2 (Originalantwort)
Oder als Erweiterung:
quelle
distanceFloat = floor(distanceFloat * 10) / 10
und dann hat es perfekt funktioniert, danke :)Verwenden Sie NSNumberFormatter:
Kehrt zurück:
3
5.1
7.21
9.31
600
0,57
0,7
quelle
let formatter = NumberFormatter() formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = 1 statLabel.text = formatter.string(from: value as NSNumber) ?? "n/a"
formatter.numberStyle = .decimal
.decimal
Zahl nicht hinzufügen. Stilzahlen unter 1 werden ohne Null angezeigt. Beispiel: .5, .78 usw. Bearbeiten Sie die Antwort jetzt.extension
ist der mächtige Weg, es zu tun.Erweiterung :
Code für Swift 2 (nicht Swift 3 oder neuer):
Verwendung :
Eine Beispielspielplatzdatei finden Sie hier .
quelle
Aktualisierung der akzeptierten Antwort für Swift 3 :
Verwendung wäre nur:
quelle
Befolgen Sie dieses Muster, um es in String zu formatieren
Folgen Sie diesem Muster, um es in Int umzuwandeln
quelle
Sie können eine Erweiterung verwenden, wie bereits erwähnt. Diese Lösung ist jedoch etwas kürzer:
Anwendungsbeispiel:
quelle
0.00000001
. Siehe Dokumentation von% g unter pubs.opengroup.org/onlinepubs/009695399/functions/printf.html : " Der verwendete Stil hängt vom konvertierten Wert ab; Stil e (oder E) darf nur verwendet werden, wenn der Exponent aus einer solchen Konvertierung resultiert ist kleiner als -4 oder größer als oder gleich der Genauigkeit. "Versuchen Sie dies in Swift 4 .
// Verwendung - Wenn Sie nach (.) Punkt mehr als zwei Zeichen eingeben, wird das letzte Zeichen automatisch beschnitten und nur zwei Zeichen nach dem Punkt angezeigt.
quelle
1.1
: Ausgabe wird sein"1.10"
.NSNumberFormatter ist dein Freund
quelle
Formatierung mit maximalen Bruchstellen ohne nachgestellte Nullen
Dieses Szenario ist gut, wenn eine benutzerdefinierte Ausgabegenauigkeit gewünscht wird. Diese Lösung scheint ungefähr so schnell zu sein wie die NumberFormatter + NSNumber- Lösung von MirekE , aber ein Vorteil könnte sein, dass wir hier NSObject vermeiden.
(funktioniert auch mit
extension Float
, aber nicht mit dem MacOS-TypFloat80
)Verwendung:
myNumericValue.string(maximumFractionDigits: 2)
odermyNumericValue.string()
Ausgabe für
maximumFractionDigits: 2
:quelle
Hier ist der vollständige Code.
Hier ist die wichtigste Zeile im Detail.
Int(number)
.Float(Int(number))
.number - Float(Int(number))
if number - Float(Int(number)) == 0
Der Inhalt der if- und else-Anweisungen muss nicht erläutert werden.
quelle
String
und anstelle vonprintln(result)
doreturn result
. Ich hoffe das hilft!Einfach:
quelle
Swift 5 für Double ist dasselbe wie @ Frankies Antwort für Float
für die Erweiterung
quelle
Dies könnte auch hilfreich sein.
Verwendung:
quelle
Vielleicht
stringByReplacingOccurrencesOfString
könnte dir helfen :)quelle
1.05
ausführenString(format: "%.1f", aFloat)
wird1.0
, funktioniert. wenn1.05
ausführenString(format: "%.2f", aFloat)
wird1.05
, und dann sollte dies tunstringByReplacingOccurrencesOfString(".00"...)