A continuación se muestra cómo hubiera truncado previamente un flotador a dos decimales
NSLog(@" %.02f %.02f %.02f", r, g, b);
Revisé los documentos y el libro electrónico, pero no he podido resolverlo. ¡Gracias!
Mi mejor solución hasta ahora, siguiendo la respuesta de David :
import Foundation
extension Int {
func format(f: String) -> String {
return String(format: "%\(f)d", self)
}
}
extension Double {
func format(f: String) -> String {
return String(format: "%\(f)f", self)
}
}
let someInt = 4, someIntFormat = "03"
println("The integer number \(someInt) formatted with \"\(someIntFormat)\" looks like \(someInt.format(someIntFormat))")
// The integer number 4 formatted with "03" looks like 004
let someDouble = 3.14159265359, someDoubleFormat = ".3"
println("The floating point number \(someDouble) formatted with \"\(someDoubleFormat)\" looks like \(someDouble.format(someDoubleFormat))")
// The floating point number 3.14159265359 formatted with ".3" looks like 3.142
Creo que esta es la solución más rápida, vinculando las operaciones de formateo directamente al tipo de datos. Es muy posible que haya una biblioteca incorporada de operaciones de formateo en algún lugar, o tal vez se lance pronto. Tenga en cuenta que el idioma aún está en beta.
una manera simple es:
fuente
println(String(format: "a float number: %.5f", 1.0321))
printf
sin tener que escribir extensiones separadas.import Foundation
Me pareció
String.localizedStringWithFormat
que funciona bastante bien:Ejemplo:
fuente
Esta es una manera muy rápida y simple que no necesita una solución compleja.
fuente
Col 16: 'init' has been renamed to 'init(describing:)'
La mayoría de las respuestas aquí son válidas. Sin embargo, en caso de que formatee el número con frecuencia, considere extender la clase Float para agregar un método que devuelva una cadena con formato. Vea el código de ejemplo a continuación. Este logra el mismo objetivo mediante el uso de un formateador de números y extensión.
La consola muestra:
Actualización de SWIFT 3.1
fuente
NSNumberFormatter
, como esta respuesta. Las otras respuestas altamente votadas simplemente no reflejan la configuración regional del dispositivo (por ejemplo, en algunas localidades, usan una coma para un lugar decimal; esto refleja eso; otras respuestas no).NSNumberFormatter
es bastante lenta de inicializar. Si es posible, ayuda a definir uno y reutilizarlo. Dicho esto, estoy aquí leyendo esta pregunta porque eso no es posible en mi caso.No puede hacerlo (todavía) con la interpolación de cadenas. Su mejor apuesta seguirá siendo el formato NSString:
Extrapolando desde Python, parece que una sintaxis razonable podría ser:
Lo que luego te permite usarlos como:
Puede definir operadores similares para todos los tipos numéricos, desafortunadamente no he encontrado una manera de hacerlo con genéricos.
Actualización de Swift 5
Al menos a partir de Swift 5,
String
admite directamente elformat:
inicializador, por lo que no es necesario usarloNSString
y el@infix
atributo ya no es necesario, lo que significa que las muestras anteriores deben escribirse como:fuente
[NSString stringWithFormat...
¿Por qué hacerlo tan complicado? Puedes usar esto en su lugar:
Véalo funcionar en Playground.
PD: Solución de: http://rrike.sh/xcode/rounding-various-decimal-places-swift/
fuente
Uso
fuente
Una solución más elegante y genérica es reescribir el
%
operador ruby / python :fuente
"Hello %@, This is pi : %.2f" % ["World", M_PI]
funciona, pero extrañamente"%@ %@" % ["Hello", "World"]
aumentocan't unsafeBitCast
... supongo que será corregido en la próxima versión.,
es un operador de caracteres válido, en Swift y la mayoría de los idiomas. E imo, es mejor usar el%
operador que ya existe en otros idiomas. Ver developer.apple.com/library/ios/documentation/Swift/Conceptual/…Swift 4
fuente
Todavía puede usar NSLog en Swift como en Objective-C solo sin el signo @.
Editar: después de trabajar con Swift desde hace un tiempo, me gustaría agregar también esta variación
Salida:
fuente
Detalles
Solución 1
func redondeado () -> Doble
func redondeado (_ regla: FloatingPointRoundingRule) -> Doble
función de mutación redonda ()
función de mutación redonda (_ regla: FloatingPointRoundingRule)
Solución 2
Uso
Muestra completa
Salida
fuente
fuente
Las respuestas dadas hasta ahora que han recibido la mayor cantidad de votos dependen de los métodos de NSString y requerirán que haya importado Foundation.
Sin embargo, después de eso, todavía tiene acceso a NSLog.
Entonces, creo que la respuesta a la pregunta, si está preguntando cómo continuar usando NSLog en Swift, es simplemente:
import Foundation
fuente
fuente
aquí una solución rápida "pura"
fuente
Poder de extensión
Salida: la velocidad es 12.3
fuente
menos forma de escribir:
fuente
También puede crear un operador de esta manera
fuente
También con redondeo:
fuente
utilice el siguiente método
fuente
Una versión del operador% ruby / python de Vincent Guerci, actualizada para Swift 2.1:
fuente
Muchas buenas respuestas anteriores, pero a veces un patrón es más apropiado que el tipo "% .3f" de gobbledygook. Aquí está mi opinión usando un NumberFormatter en Swift 3.
Aquí quería que siempre se mostraran 2 decimales, pero el tercero solo si no era cero.
fuente
Actualización de Swift 4 Xcode 10
fuente
¿Qué pasa con las extensiones en los tipos Double y CGFloat:
Uso:
impresiones: 112 465 848 348 508.46
fuente
fuente
No sé acerca de dos lugares decimales, pero así es como puede imprimir flotantes con cero lugares decimales, así que me imagino que puede ser 2 lugares, 3, lugares ... (Nota: debe convertir CGFloat a Doble para pasar a cadena (formato :) o verá un valor de cero)
fuente
Ejemplo de Swift2: ancho de pantalla del dispositivo iOS formateando el flotador eliminando el decimal
fuente
@Christian Dietrich:
en vez de:
También podría ser:
[corrección:] Perdón por la confusión * - Por supuesto, esto funciona con Dobles. Creo que lo más práctico (si quieres que los dígitos se redondeen, no se corten) sería algo así:
Solo para Flotador, simplemente reemplace Doble con Flotador, pow con powf y redondee con roundf.
Actualización: descubrí que es más práctico usar el tipo de retorno Double en lugar de String. Funciona igual para la salida de cadena, es decir:
imprime: Pi es aproximadamente 3.142
Por lo tanto, puede usarlo de la misma manera para las cadenas (incluso puede escribir: println (d ~> 2)), pero también puede usarlo para redondear valores directamente, es decir:
o lo que necesites ...
fuente
utilizar
o
fuente