into float entero convertir convert cast string swift int type-conversion

string - float - Ceros iniciales para Int en Swift



int to string swift 4 (8)

Me gustaría convertir un Int en Swift en una String con ceros iniciales. Por ejemplo considera este código:

for myInt in 1...3 { print("/(myInt)") }

Actualmente el resultado es:

1 2 3

Pero quiero que sea:

01 02 03

¿Hay una forma limpia de hacerlo dentro de las bibliotecas estándar de Swift?


Detalles

Xcode 9.0.1, swift 4.0

Soluciones

Datos

import Foundation let array = [0,1,2,3,4,5,6,7,8]

Solución 1

extension Int { func getString(prefix: Int) -> String { return "/(prefix)/(self)" } func getString(prefix: String) -> String { return "/(prefix)/(self)" } } for item in array { print(item.getString(prefix: 0)) } for item in array { print(item.getString(prefix: "0x")) }

Solucion 2

for item in array { print(String(repeatElement("0", count: 2)) + "/(item)") }

Solucion 3

extension String { func repeate(count: Int, string: String? = nil) -> String { if count > 1 { let repeatedString = string ?? self return repeatedString + repeate(count: count-1, string: repeatedString) } return self } } for item in array { print("0".repeate(count: 3) + "/(item)") }


A diferencia de las otras respuestas que utilizan un formateador, también puede agregar un texto "0" delante de cada número dentro del bucle, de esta manera:

for myInt in 1...3 { println("0" + "/(myInt)") }

Pero el formateador a menudo es mejor cuando tiene que agregar suponer una cantidad designada de 0s por cada número separado. Sin embargo, si solo necesita agregar un 0, entonces es realmente su elección.


Con Swift 4, puede elegir uno de los tres ejemplos que se muestran a continuación para resolver su problema.

# 1. Usando el init(format:_:) String init(format:_:) inicializador

Foundation proporciona Swift String a init(format:_:) initializer. init(format:_:) tiene la siguiente declaración:

init(format: String, _ arguments: CVarArg...)

Devuelve un objeto String inicializado utilizando una cadena de formato dada como una plantilla en la que se sustituyen los valores de argumento restantes.

El siguiente código de Zona de juegos muestra cómo crear una String formateada desde Int con al menos dos dígitos enteros utilizando init(format:_:) :

import Foundation let string0 = String(format: "%02d", 0) // returns "00" let string1 = String(format: "%02d", 1) // returns "01" let string2 = String(format: "%02d", 10) // returns "10" let string3 = String(format: "%02d", 100) // returns "100"

# 2. Usando el init(format:arguments:) String init(format:arguments:) inicializador

Foundation proporciona Swift String un init(format:arguments:) inicializador. init(format:arguments:) tiene la siguiente declaración:

init(format: String, arguments: [CVarArg])

Devuelve un objeto String inicializado utilizando una cadena de formato dada como una plantilla en la que los valores de argumento restantes se sustituyen de acuerdo con la configuración regional predeterminada del usuario.

El siguiente código de Zona de juegos muestra cómo crear una String formateada desde Int con al menos dos dígitos enteros utilizando init(format:arguments:) :

import Foundation let string0 = String(format: "%02d", arguments: [0]) // returns "00" let string1 = String(format: "%02d", arguments: [1]) // returns "01" let string2 = String(format: "%02d", arguments: [10]) // returns "10" let string3 = String(format: "%02d", arguments: [100]) // returns "100"

# 3. Usando NumberFormatter

Fundación proporciona NumberFormatter . Apple dice al respecto:

Las instancias de NSNumberFormatter formatean la representación textual de las celdas que contienen objetos NSNumber y convierten las representaciones textuales de valores numéricos en objetos NSNumber . La representación abarca enteros, flotantes y dobles; flotantes y dobles se pueden formatear a una posición decimal especificada.

El siguiente código de NumberFormatter juegos muestra cómo crear un NumberFormatter que devuelve String? de un Int con al menos dos dígitos enteros:

import Foundation let formatter = NumberFormatter() formatter.minimumIntegerDigits = 2 let optionalString0 = formatter.string(from: 0) // returns Optional("00") let optionalString1 = formatter.string(from: 1) // returns Optional("01") let optionalString2 = formatter.string(from: 10) // returns Optional("10") let optionalString3 = formatter.string(from: 100) // returns Optional("100")


Las otras respuestas son buenas si está tratando solo con números usando la cadena de formato, pero esto es bueno cuando puede tener cadenas que necesitan ser rellenadas (aunque es cierto que un poco diferente a la pregunta, parece similar en espíritu). Además, tenga cuidado si la cuerda es más larga que la almohadilla.

let str = "a str" let padAmount = max(10, str.count) String(repeatElement("-", count: padAmount - str.count)) + str

Salida "-----a str"


Para el relleno izquierdo, agregue una extensión de cadena como esta:

Swift 2.0 +

extension String { func padLeft (totalWidth: Int, with: String) -> String { let toPad = totalWidth - self.characters.count if toPad < 1 { return self } return "".stringByPaddingToLength(toPad, withString: with, startingAtIndex: 0) + self } }

Swift 3.0 +

extension String { func padLeft (totalWidth: Int, with: String) -> String { let toPad = totalWidth - self.characters.count if toPad < 1 { return self } return "".padding(toLength: toPad, withPad: with, startingAt: 0) + self } }

Utilizando este método:

for myInt in 1...3 { print("/(myInt)".padLeft(totalWidth: 2, with: "0")) }


Suponiendo que desea una longitud de campo de 2 con ceros iniciales, haría esto:

import Foundation for myInt in 1...3 { print(String(format: "%02d", myInt)) }

salida:

01 02 03

Esto requiere import Foundation así que técnicamente no es parte del lenguaje Swift sino una capacidad proporcionada por el marco de Foundation . Tenga en cuenta que tanto import UIKit como import Cocoa incluyen Foundation por lo que no es necesario volver a importarlo si ya ha importado Cocoa o UIKit .

La cadena de formato puede especificar el formato de varios elementos. Por ejemplo, si está tratando de formatear 3 horas, 15 minutos y 7 segundos en 03:15:07 , podría hacerlo así:

let hours = 3 let minutes = 15 let seconds = 7 print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))

salida:

03:15:07


en Xcode 8.3.2, iOS 10.3 Eso es bueno ahora

Muestra 1:

let dayMoveRaw = 5 let dayMove = String(format: "%02d", arguments: [dayMoveRaw]) print(dayMove) // 05

Muestra2:

let dayMoveRaw = 55 let dayMove = String(format: "%02d", arguments: [dayMoveRaw]) print(dayMove) // 55


Swift 3.0+

Acolchado izquierdo Extensión de la String similar al padding(toLength:withPad:startingAt:) en Foundation

extension String { func leftPadding(toLength: Int, withPad: String = " ") -> String { guard toLength > self.characters.count else { return self } let padding = String(repeating: withPad, count: toLength - self.characters.count) return padding + self } }

Uso:

let s = String(123) s.leftPadding(toLength: 8, withPad: "0") // "00000123"