ios swift separator

ios - Agregar mil separadores a Int en Swift



separator (5)

Soy bastante nuevo en Swift y tengo muchos problemas para encontrar una manera de agregar un espacio como un separador de miles.

Lo que espero lograr es tomar el resultado de un cálculo y mostrarlo en un campo de texto para que el formato sea:

2 358 000

en vez de

2358000

por ejemplo.

No estoy seguro de si debería formatear el valor Int y luego convertirlo en una Cadena, o agregar el espacio después de que el valor Int se convierta en una Cadena. Cualquier ayuda sería muy apreciada.


Con Swift 5, cuando necesita formatear la visualización de números, NumberFormatter es la herramienta adecuada.

NumberFormatter tiene una propiedad llamada numberStyle . numberStyle se puede establecer en un valor de NumberFormatter.Style.decimal para establecer el estilo del formateador en decimal.

Por lo tanto, en el caso más simple cuando desea formatear un número con estilo decimal, puede usar el siguiente código de Playground:

import Foundation let formatter = NumberFormatter() formatter.numberStyle = NumberFormatter.Style.decimal let amount = 2358000 let formattedString = formatter.string(for: amount) print(String(describing: formattedString))

Según la configuración regional actual del usuario, este código imprimirá Optional("2,358,000") para en_US u Optional("2 358 000") para fr_FR .

Tenga en cuenta que el siguiente fragmento de código que usa la propiedad de configuración locale de Locale.current establecida en Locale.current es equivalente al código anterior de Playground:

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))

El siguiente código de Playground que usa la propiedad groupingSeparator de Locale.current.groupingSeparator establecida en Locale.current.groupingSeparator también es equivalente a la anterior:

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))

De lo contrario, si desea establecer el formato de número con un estilo de formato de configuración regional específico, puede usar el siguiente código de Playground:

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")

Sin embargo, si lo que realmente desea es aplicar un separador de agrupación específico, puede usar el siguiente código de Playground:

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")


Desea usar 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"


La respuesta de Leo Dabus traducida a Swift 3 :

En cualquier archivo .swift , fuera de una clase:

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)) ?? "" } }

Uso:

let myInteger = 2358000 let myString = myInteger.stringWithSeparator // "2 358 000"


Prueba esto

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) }

La llamada:

addPoints(inputNumber: "123456")

El resultado:

123 456 (o 123.456)


Puede usar NSNumberFormatter para especificar un separador de agrupación diferente de la siguiente manera:

actualización: 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"

Nota: Si desea tener un espacio con el mismo ancho de un período, puede usar "/u{2008}"

espacios unicode

formatter.groupingSeparator = "/u{2008}"