swift - ganadores - mtv vma 2018
Swift doble a cadena (11)
Antes de actualizar xCode 6, no tuve problemas para convertir un doble en una cadena de caracteres ahora me da error
var a: Double = 1.5
var b: String = String(a)
Me da el mensaje de error "el doble no es convertible en cadena". ¿Hay alguna otra forma de hacerlo?
Además de la respuesta @Zaph, puede crear una extension:
extension Double {
func toString() -> String {
return String(format: "%.1f",self)
}
}
Uso:
var a:Double = 1.5
println("output: /(a.toString())") // output: 1.5
En Swift 4, si desea modificar y usar un doble en la interfaz de usuario como una "cadena" textLabel, puede agregar esto al final de su archivo:
extension Double {
func roundToInt() -> Int{
return Int(Darwin.round(self))
}
}
Y úsalo así si quieres tenerlo en una etiqueta de texto:
currentTemp.text = "/(weatherData.tempCelsius.roundToInt())"
O imprímalo como Int:
print(weatherData.tempCelsius.roundToInt())
En swift 3 es simple como se muestra a continuación
let stringDouble = String(describing: double)
En veloz 3:
var a: Double = 1.5
var b: String = String(a)
Esta función le permitirá especificar la cantidad de decimales que se mostrarán:
func doubleToString(number:Double, numberOfDecimalPlaces:Int) -> String {
return String(format:"%."+numberOfDecimalPlaces.description+"f", number)
}
Uso:
let numberString = doubleToStringDecimalPlacesWithDouble(number: x, numberOfDecimalPlaces: 2)
No está emitiendo, está creando una cadena a partir de un valor con un formato.
let a:Double = 1.5
let b:String = String(format:"%f", a)
print("b: /(b)") // b: 1.500000
Con un formato diferente:
let c:String = String(format:"%.1f", a)
print("c: /(c)") // c: 1.5
para hacer que cualquier cadena sea rápida, excepto que tal vez los valores enum simplemente hagan lo que haces en el método println ()
por ejemplo:
var stringOfDBL = "/(myDouble)"
Swift 3+: prueba esta línea de código
let num: Double = 1.5
let str = String(format: "%.2f", num)
Swift 4 : Usa el siguiente código
let number = 2.4
let string = String(format: "%.2f", number)
let myDouble = 1.5
let myString = myDouble.description
actualizar Xcode 7.1 • Swift 2.1:
Ahora Double también se puede convertir a String para que pueda usarlo como desee:
let myDouble = 1.5
let myDoubleString = String(myDouble) // "1.5"
Xcode 8.3.2 • Swift 3.1 :
para un número fijo de dígitos de fracción, también puedes extender el doble:
extension FloatingPoint {
func fixedFraction(digits: Int) -> String {
return String(format: "%./(digits)f", self as! CVarArg)
}
}
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:
extension Formatter {
static let number = NumberFormatter()
}
extension FloatingPoint {
func fractionDigits(min: Int = 2, max: Int = 2, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
Formatter.number.minimumFractionDigits = min
Formatter.number.maximumFractionDigits = max
Formatter.number.roundingMode = roundingMode
Formatter.number.numberStyle = .decimal
return Formatter.number.string(for: self) ?? ""
}
}
2.12345.fractionDigits() // "2.12"
2.12345.fractionDigits(min: 3, max: 3, roundingMode: .up) // "2.124"
var b = String(stringInterpolationSegment: a)
Esto funciona para mí Puede intentarlo