web-dev-qa-db-fra.com

Swift double à cordes

Avant de mettre à jour xCode 6, je n'avais aucun problème pour convertir un double en bur bur.

var a: Double = 1.5
var b: String = String(a)

Cela me donne le message d'erreur "double n'est pas convertible en chaîne". Y a-t-il un autre moyen de le faire?

79
tim_yng

Ce n'est pas un casting, c'est créer une chaîne à partir d'une valeur avec un format.

let a:Double = 1.5
let b:String = String(format:"%f", a)
print("b: \(b)") // b: 1.500000

Avec un format différent:

let c:String = String(format:"%.1f", a)
print("c: \(c)") // c: 1.5
157
zaph
let myDouble = 1.5 
let myString = myDouble.description

mise à jour Xcode 7.1 • Swift 2.1:

Maintenant, Double est également convertible en chaîne afin que vous puissiez simplement l'utiliser comme vous le souhaitez:

let myDouble = 1.5
let myDoubleString = String(myDouble)   // "1.5"

Xcode 8.3.2 • Swift 3.1 :

pour un nombre fixe de chiffres fractionnaires, vous pouvez également étendre le double:

extension FloatingPoint {
    func fixedFraction(digits: Int) -> String {
        return String(format: "%.\(digits)f", self as! CVarArg)
    }
}

Si vous avez besoin de plus de contrôle sur le format de votre numéro (chiffres fractionnaires minimum et maximum et mode d'arrondissement), vous pouvez utiliser 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"
63
Leo Dabus

En plus de @Zaph answer, vous pouvez créer extension:

extension Double {
    func toString() -> String {
        return String(format: "%.1f",self)
    }
}

Utilisation:

var a:Double = 1.5
println("output: \(a.toString())")  // output: 1.5
16
Maxim Shoustin

Swift 3+: Essayez ces lignes de code

let num: Double = 1.5

let str = String(format: "%.2f", num)
10
Shiv Kumar

pour transformer n'importe quoi en chaîne dans Swift, sauf peut-être les valeurs enum, faites simplement ce que vous faites dans la méthode println () 

par exemple: 

var stringOfDBL = "\(myDouble)"
8
eric bob

Cette fonction vous permettra de spécifier le nombre de décimales à afficher:

func doubleToString(number:Double, numberOfDecimalPlaces:Int) -> String {
    return String(format:"%."+numberOfDecimalPlaces.description+"f", number)
}

Usage:

let numberString = doubleToStringDecimalPlacesWithDouble(number: x, numberOfDecimalPlaces: 2)
3
MobileMon

Swift 4 : Utilisez le code suivant

let number = 2.4
let string = String(format: "%.2f", number)
3
Abhishek Jain

Dans Swift 3:

var a: Double = 1.5
var b: String = String(a)
1
carlson

Je préférerais l'approche NSNumber et NumberFormatter (en cas de besoin), vous pouvez également utiliser l'extension pour éviter le code de ballonnement

extension Double {

   var toString: String {
      return NSNumber(value: self).stringValue
   }

}

U peut aussi avoir besoin d'une approche inversée

extension String {

    var toDouble: Double {
        return Double(self) ?? .nan
    }

}
1

Dans Swift 3 c'est simple comme indiqué ci-dessous

let stringDouble =  String(describing: double)
1
Sebin Roy
var b = String(stringInterpolationSegment: a)

Cela fonctionne pour moi. Vous pouvez essayer

0
sevenkplus

Dans Swift 4, si vous souhaitez modifier et utiliser un double dans l'interface utilisateur en tant que textLabel "String", vous pouvez l'ajouter à la fin de votre fichier:

    extension Double {
func roundToInt() -> Int{
    return Int(Darwin.round(self))
}

}

Et utilisez-le comme ceci si vous aimez l'avoir dans un label de texte:

currentTemp.text = "\(weatherData.tempCelsius.roundToInt())"

Ou imprimez-le comme un Int:

print(weatherData.tempCelsius.roundToInt())