Antes de actualizar xCode 6, no tenía problemas para convertir un doble en una cadena, pero ahora me da un error
var a: Double = 1.5
var b: String = String(a)
Me da el mensaje de error "el doble no se puede convertir en una cadena". ¿Hay alguna otra forma de hacerlo?
var b = "\(a)"
Respuestas:
No es casting, está creando una cadena a partir de un valor con un formato.
Con un formato diferente:
También puede omitir la
format
propiedad si no se necesita formato.fuente
format:"%.1f" = 1 digit // 1.5
;format:"%.5f" = 5 digits // 1.50000
String(yourDouble)
.actualizar Xcode 7.1 • Swift 2.1:
Ahora Double también es convertible a String, por lo que simplemente puede usarlo como desee:
Swift 3 o posterior podemos extenderlo
LosslessStringConvertible
y hacerlo genéricoXcode 11.3 • Swift 5.1 o posterior
Para un número fijo de dígitos fraccionarios, podemos extender el
FloatingPoint
protocolo:Si necesita más control sobre el formato de su número (dígitos de fracción mínima y máxima y modo de redondeo) puede usar NumberFormatter:
fuente
String(format: "%.\(digits)f", self as! CVarArg)
conString(format: "%.*f", digits, self as! CVarArg)
Además de la respuesta de @Zaph, puede crear
extension:
Uso:
fuente
a.toString()
es vista por otro desarrollador definitivamente habrá un momento WTF.myToString()
para asegurarse de que su definición personalizada. Pero al igual que en otros lenguajes, la creación de prototipos evita la duplicación de código y un buen mantenimiento.println("output: \(a.toString())")
yprintln("output: \(a)")
. La segunda opción no causa errores de compilación. ¿Es esta opción una mala práctica?yourDouble?.toString() ?? ""
Swift 3+: prueba estas líneas de código
fuente
para convertir cualquier cosa en una cadena en rápido, excepto tal vez los valores de enumeración, simplemente haga lo que hace en el método println ()
por ejemplo:
fuente
Swift 4 : use el siguiente código
fuente
Esta función le permitirá especificar el número de posiciones decimales para mostrar:
Uso:
fuente
String(format:"%."+numberOfDecimalPlaces.description+"f", number)
conString(format:"%.*f", numberOfDecimalPlaces, number)
Aquí hay muchas respuestas que sugieren una variedad de técnicas. Pero al presentar números en la interfaz de usuario, invariablemente desea utilizar un
NumberFormatter
para que los resultados estén formateados, redondeados y localizados correctamente:Si desea un número fijo de decimales, por ejemplo, para valores de moneda
Pero la belleza de este enfoque es que estará correctamente localizado, lo que resultará en
10,000.50
Estados Unidos pero10.000,50
en Alemania. Las diferentes configuraciones regionales tienen diferentes formatos preferidos para los números, y debemos permitir queNumberFormatter
usemos el formato preferido por el usuario final al presentar valores numéricos dentro de la interfaz de usuario.No hace falta decir que, si bien
NumberFormatter
es esencial al preparar representaciones de cadenas dentro de la interfaz de usuario, no debe usarse si se escriben valores numéricos como cadenas para almacenamiento persistente, interfaz con servicios web, etc.fuente
En Swift 3:
fuente
En Swift 3 es simple como se indica a continuación
fuente
"Optional(6.1696108999999995)"
para mí.Esto funciona para mi. Puede intentarlo
fuente
En Swift 4, si desea modificar y usar un Double en la interfaz de usuario como una etiqueta de texto "String", puede agregar esto al final de su archivo:
}
Y utilícelo así si desea tenerlo en una etiqueta de texto:
O imprímalo como un Int:
fuente
Preferiría el enfoque NSNumber y NumberFormatter (donde sea necesario), también puede usar la extensión para evitar el código hinchado
U también puede necesitar un enfoque inverso
fuente
LossLessStringConvertible
protocolo en lugar de extender Doubleextension LosslessStringConvertible { var string: String { return .init(self) } }
Swift 5 : use el siguiente código
fuente
String(format: "%.\(points)f", self)
conString(format: "%.*f", points, self)