decimals swift formatting numbers

swift - decimals - Formato de número rápido



swift double to string 2 decimals (4)

Estoy empezando a conocer a Swift pero estoy teniendo un problema serio con el formato de los números en un nivel extremadamente básico.

Por ejemplo, necesito mostrar un número entero con al menos 2 dígitos (por ejemplo, 00, 01, 02, 03, 04, 05 ...). La sintaxis normal que esperaría sería algo así como:

println ("% 02i% 02i% 02i", var1, var2, var3);

... pero no encuentro ninguna instrucción clara sobre cómo lograr esto en Swift. Encuentro realmente difícil creer que necesito crear una función personalizada para hacer eso. Lo mismo para devolver un valor flotante o doble a una cantidad fija de decimales.

He encontrado enlaces a un par de preguntas similares ( Especificador de formato de cadena de precisión en Swift y cómo usar println en Swift para formatear el número ), pero parecen mezclar el objetivo C e incluso hablar sobre Python y usar bibliotecas unitarias. ¿No hay una solución Swift para esta necesidad básica de programación? ¿Es realmente cierto que algo tan fundamental ha sido completamente pasado por alto en Swift?


Aquí hay una solución POP para el problema:

protocol Formattable { func format(pattern: String) -> String } extension Formattable where Self: CVarArg { func format(pattern: String) -> String { return String(format: pattern, arguments: [self]) } } extension Int: Formattable { } extension Double: Formattable { } extension Float: Formattable { } let myInt = 10 let myDouble: Double = 0.01 let myFloat: Float = 1.11 print(myInt.format(pattern: "%04d")) // "0010 print(myDouble.format(pattern: "%.2f")) // "0.01" print(myFloat.format(pattern: "$%03.2f")) // "$1.11" print(100.format(pattern: "%05d")) // "00100"


Hay una solución simple que aprendí con "We <3 Swift", que es tan fácil que incluso puede usar sin Foundation, round () o Strings, manteniendo el valor numérico.

Ejemplo:

var number = 31.726354765 var intNumber = Int(number * 1000.0) var roundedNumber = Double(intNumber) / 1000.0

resultado: 31.726


Puede construir una cadena con un formato c-like usando este constructor:

String(format: String, arguments:[CVarArgType])

Uso de muestra:

var x = 10 println(String(format: "%04d", arguments: [x])) // This will print "0010"

Si va a usarlo mucho y desea una forma más compacta, puede implementar una extensión como esta:

extension String { func format(arguments: [CVarArgType]) -> String { return String(format: self, arguments: arguments) } }

lo que permite simplificar su uso como en este ejemplo:

"%d apples cost $%03.2f".format([4, 4 * 0.33])


Todavía puede usar un buen ole NSLog ("% .2f", myFloatOrDouble) también: D