Swift - Comment faire pour supprimer une décimale à partir d'un flotteur si la décimale est égale à 0?
J'affiche une distance avec une décimale, et je voudrais enlever cette virgule dans le cas où il est égal à 0 (ex: 1200.0 Km), comment pourrais-je le faire dans swift?
Je suis l'affichage de ce nombre comme ceci:
let distanceFloat: Float = (currentUser.distance! as NSString).floatValue
distanceLabel.text = String(format: "%.1f", distanceFloat) + "Km"
- Double Possible de Swift - Supprimer les Zéros à droite De la Double
Vous devez vous connecter pour publier un commentaire.
Swift 3/4:
Swift 2 (réponse Originale à cette question)
Ou comme une extension:
distanceFloat = floor(distanceFloat * 10) / 10
et puis il a parfaitement fonctionné, merci 🙂Utilisation NSNumberFormatter:
Retourne:
3
5.1
7.21
9.31
600
0.57
De 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
numberStyle les numéros ci-dessous 1 affiche sans un zéro. Par exemple: .5, .78, etc... Édition de la réponse maintenant.extension
est le puissant moyen de le faire.Extension:
Code Swift 2 (pas de Swift 3 ou plus récent):
Utilisation:
L'échantillon de l'aire de Jeux fichier est ici.
Mise à jour de accepté de répondre pour swift 3:
utilisation serait:
Vous pouvez utiliser une extension comme déjà mentionné, cette solution est un peu plus courte que:
Exemple d'utilisation:
0.00000001
. Voir la documentation de %g à pubs.opengroup.org/onlinepubs/009695399/functions/printf.html: "Le style utilisé dépend de la valeur convertie; style e (ou E ) ne doit être utilisé que si l'exposant résultant de cette conversion, c'est moins de 4 ou supérieur ou égal à la précision."Pour le format de la Chaîne, suivez ce modèle
Pour le format Int, suivez ce modèle
Dans Swift 4 de l'essayer.
//Comment utiliser - si vous entrez plus de deux caractères après (.)point, il est automatiquement recadrage le dernier caractère et de n'afficher que deux caractères après le point.
1.1
: sortie sera"1.10"
.NSNumberFormatter est votre ami
Voici le code complet.
Voici le plus important en profondeur.
Int(number)
.Float(Int(number))
.number - Float(Int(number))
if number - Float(Int(number)) == 0
Le contenu dans le if et else n'a pas besoin d'expliquer.
String
et au lieu de laprintln(result)
nereturn result
. J'espère que cela aide!Cela peut être utile aussi.
Utilisation:
Mise en forme avec le maximum de la fraction chiffres, sans les zéros à droite
Ce scénario est bon lorsqu'une production sur mesure de précision est souhaitée.
Cette solution semble à peu près aussi vite que NumberFormatter + NSNumber solution de MirekE, mais un avantage pourrait être que nous sommes en évitant de NSObject ici.
(fonctionne aussi avec
extension Float
, mais pas le macOS uniquement de typeFloat80
)Utilisation:
myNumericValue.string(maximumFractionDigits: 2)
oumyNumericValue.string()
De sortie pour
maximumFractionDigits: 2
:Peut-être
stringByReplacingOccurrencesOfString
pourrait vous aider 🙂1.05
exécuterString(format: "%.1f", aFloat)
premier sera1.0
, fonctionne. si1.05
exécuterString(format: "%.2f", aFloat)
sera1.05
, et qu'ils ne devraient le fairestringByReplacingOccurrencesOfString(".00"...)