Ajout D'un séparateur de milliers à Int dans Swift
je suis assez nouveau à Swift et avoir beaucoup de mal à trouver un moyen pour ajouter un espace comme séparateur de milliers.
Ce que j'espère accomplir est de prendre le résultat d'un calcul et l'afficher dans un champ de texte de sorte que le format est:
2 358 000
au lieu de
2358000
par exemple.
Je ne suis pas sûr si je dois formater la valeur Int et puis la convertir en une chaîne, ou ajouter l'espace après que la valeur Int est convertie en une chaîne. Toute aide serait grandement appréciée.
5 réponses
vous pouvez utiliser NSNumberFormatter pour spécifier un séparateur de regroupement différent comme suit:
mise à jour: Xcode 9 • Swift 4
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.groupingSeparator = " "
formatter.numberStyle = .decimal
return formatter
}()
}
extension BinaryInteger {
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
Xcode 8.3.2 • Swift 3.1
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.groupingSeparator = " "
formatter.numberStyle = .decimal
return formatter
}()
}
extension Integer {
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
let myInt = 2358000
let myIntString = myInt.formattedWithSeparator // "2 358 000"
Remarque: Si vous souhaitez disposer d'un espace avec la même largeur d'une période donnée, vous pouvez utiliser "\u{2008}"
formatter.groupingSeparator = "\u{2008}"
vous voulez utiliser NSNumberFormatter
:
let fmt = NSNumberFormatter()
fmt.numberStyle = .DecimalStyle
fmt.stringFromNumber(2358000) // with my locale, "2,358,000"
fmt.locale = NSLocale(localeIdentifier: "fr_FR")
fmt.stringFromNumber(2358000) // "2 358 000"
Avec Swift 3, lorsque vous avez besoin de formater l'affichage des numéros, NumberFormatter
est le bon outil.
NumberFormatter
possède une propriété appelée numberStyle
. numberStyle
peut être réglé à une valeur NumberFormatter.Style.decimal
afin de définir le style du formatteur à la décimale.
par conséquent, dans le cas le plus simple où vous voulez formater un nombre avec le style décimal, Vous pouvez utiliser le code de terrain de jeu suivant:
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
let amount = 2358000
let formattedString = formatter.string(for: amount)
print(String(describing: formattedString))
Selon l'utilisateur courant locale, ce code affichera Optional("2,358,000")
en_US ou Optional("2 358 000")
fr_FR.
Notez que l'extrait de code suivant utilise la NumberFormatter
locale
propriété définie à Locale.current
est l'équivalent du code de terrain de jeu précédent:
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.locale = Locale.current
let amount = 2358000
let formattedString = formatter.string(for: amount)
print(String(describing: formattedString))
le code de terrain de jeu en dessous qui utilise le NumberFormatter
groupingSeparator
propriété définie à Locale.current.groupingSeparator
est équivalent à la ancien:
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.groupingSeparator = Locale.current.groupingSeparator
let amount = 2358000
let formattedString = formatter.string(for: amount)
print(String(describing: formattedString))
Sinon, si vous voulez définir le formatage de nombre avec un style de formatage de locale spécifique, vous pouvez utiliser le code de terrain de jeu suivant:
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.locale = Locale(identifier: "FR_fr")
let amount = 2358000
let formattedString = formatter.string(for: amount)
print(String(describing: formattedString))
// prints: Optional("2 358 000")
cependant, si ce que vous voulez vraiment est d'appliquer un séparateur de regroupement spécifique, vous pouvez utiliser le code de terrain de jeu ci-dessous:
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.groupingSeparator = " "
let amount = 2358000
let formattedString = formatter.string(for: amount)
print(String(describing: formattedString))
// prints: Optional("2 358 000")
la réponse de Leo Dabus traduit en Swift 3:
dans tout .swift
le fichier de la classe:
struct Number {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.groupingSeparator = " " // or possibly "." / ","
formatter.numberStyle = .decimal
return formatter
}()
}
extension Integer {
var stringWithSepator: String {
return Number.withSeparator.string(from: NSNumber(value: hashValue)) ?? ""
}
}
Utilisation:
let myInteger = 2358000
let myString = myInteger.stringWithSeparator // "2 358 000"
Essayez ceci
func addPoints(inputNumber: NSMutableString){
var count: Int = inputNumber.length
while count >= 4 {
count = count - 3
inputNumber.insert(" ", at: count) // you also can use ","
}
print(inputNumber)
}
L'appel:
addPoints(inputNumber: "123456")
Le résultat:
123 456 (ou 123 456)